Skip to content

Diarisation audio ​

Identifie et segmente les tours de parole dans un fichier audio : qui parle, et à quel moment. Basé sur le modèle pyannote-diarization.


Endpoints ​

MéthodeEndpointModeDescription
POST/v1/audio/diarizationsSyncDiarisation, résultat inline
POST/v1/diarizeSyncAlias synchrone
POST/jobs/audioAsyncDiarisation asynchrone (recommandé)

Formats et limites ​

AttributValeur
Formats acceptés.mp3 .mp4 .wav .m4a .ogg .flac
Taille maximale1 Go

Paramètres ​

Requis ​

ParamètreTypeDescription
filefichierFichier audio à diariser
modelstringModèle à utiliser : pyannote-diarization

Optionnels ​

ParamètreTypeDescription
num_speakersintegerNombre exact de locuteurs si connu (court-circuite la détection automatique)
min_speakersintegerNombre minimal de locuteurs attendus
max_speakersintegerNombre maximal de locuteurs attendus
min_duration_offfloatDurée minimale de silence entre deux segments d'un même locuteur (en secondes)
clustering_thresholdfloatSeuil de clustering VBx
clustering_FafloatProbabilité de fausse alarme VBx
clustering_FbfloatProbabilité de manqué VBx
clustering_min_cluster_sizeintegerTaille minimale de cluster (clustering agglomératif)

Performances mesurées ​

Benchmarks réalisés en mai 2026 sur 40 jobs complétés. Taux d'erreur : 0% sur 40 jobs.

Fichiers courts (≈ 105 s d'audio) ​

ModeJobsInférence minInférence moyInférence maxRTF moyen
Poll158 s14 s28 s0.129
Webhook1511 s21 s40 s0.197

Le RTF sur fichiers courts est plus élevé en raison de l'overhead fixe du pipeline pyannote (segmentation + embedding), proportionnellement plus lourd sur des fichiers courts.

Fichiers longs (1 heure d'audio) ​

ModeJobsInférence minInférence moyInférence maxRTF moyen
Poll5345 s427 s556 s0.119
Webhook5245 s326 s420 s0.091

Une heure d'audio est diarisée en 5 min 26 s (webhook) à 7 min 07 s (poll) en moyenne.


Format de réponse ​

json
{
  "speakers": [
    {
      "speaker": "SPEAKER_00",
      "segments": [
        { "start": 0.5, "end": 4.2 },
        { "start": 12.1, "end": 18.7 }
      ]
    },
    {
      "speaker": "SPEAKER_01",
      "segments": [
        { "start": 4.5, "end": 11.8 }
      ]
    }
  ]
}

Exemples ​

Synchrone (curl) ​

bash
curl -X POST https://api.mirai.interieur.gouv.fr/v1/audio/diarizations \
  -H "Authorization: Bearer <TOKEN>" \
  -F "model=pyannote-diarization" \
  -F "file=@reunion.wav"

Avec nombre de locuteurs forcé ​

bash
curl -X POST https://api.mirai.interieur.gouv.fr/v1/audio/diarizations \
  -H "Authorization: Bearer <TOKEN>" \
  -F "model=pyannote-diarization" \
  -F "file=@entretien.wav" \
  -F "num_speakers=2"

Asynchrone avec webhook (recommandé pour fichiers > 30 s) ​

bash
curl -X POST https://api.mirai.interieur.gouv.fr/jobs/audio \
  -H "Authorization: Bearer <TOKEN>" \
  -F "model=pyannote-diarization" \
  -F "operation=diarization" \
  -F "file=@conference.mp3" \
  -F "callback_url=https://mon-app.example.com/hooks/diarization"

→ Voir Modes d'appel pour le cycle de vie complet d'un job async.


Combinaison transcription + diarisation ​

La diarisation retourne des segments temporels par locuteur. Pour obtenir un transcript enrichi avec les locuteurs, combinez la sortie de diarisation avec une transcription Whisper en alignant les timestamps côté application.

Ce découpage est intentionnel : chaque service reste autonome et optimisé. L'alignement est plus fiable fait par l'application consommatrice, qui connaît le contexte métier.

Documentation maintained by the team