Comment transcrire un enregistrement Zoom, Meet ou Teams en identifiant les locuteurs
Exportez votre enregistrement en MP4 ou M4A, puis envoyez son URL à POST /transcribe avec include_diarization à true. Vous récupérez chaque intervention avec une étiquette speaker ainsi que ses horodatages de début et de fin. Il suffit ensuite de passer cette transcription étiquetée à votre LLM pour générer le compte rendu et la liste des actions. L’API traite uniquement les fichiers enregistrés que vous lui transmettez ; elle ne se connecte pas aux réunions en direct.
Obtenir une clé API Démarrage rapide Langues prises en charge
Transcrire l’enregistrement en distinguant les locuteurs
Téléversez votre fichier via POST /upload (jusqu’à 100 MiB ; au-delà, extrayez d’abord la piste audio avec ffmpeg) ou passez directement une URL publique, puis lancez la transcription. Le paramètre num_speakers est facultatif, mais renseignez-le si vous connaissez le nombre exact d’intervenants.
curl https://app.kolwrite.com/transcribe \
-H "x-api-key: $KOLWRITE_API_KEY" -H "Content-Type: application/json" \
-d '{"audio_url": "https://example.com/weekly-sync.mp4", "model": "oracle", "language": "auto",
"include_diarization": true, "num_speakers": 4, "output_format": "json"}'
Vous pouvez interroger GET /transcribe/{jobId}, ou renseigner webhook_url pour que votre serveur soit appelé dès que le traitement d’une longue réunion est terminé.
Chaque segment indique le locuteur, les horodatages et le détail des mots :
{
"jobId": "34c63d45-4cb5-473b-bc60-25c175e69c57",
"status": "COMPLETED",
"result": {
"language": "en",
"segments": [
{
"start": 1.0,
"end": 3.75,
"text": "Hello everyone and welcome to the show.",
"speaker": "Speaker 1",
"words": [
{ "start": 1.0, "end": 1.35, "word": "Hello" },
{ "start": 1.4, "end": 1.75, "word": "everyone" }
]
}
]
}
}
Associer un nom à chaque locuteur
Les locuteurs reçoivent des étiquettes génériques comme Speaker 1 ou Speaker 2. C’est à vous d’associer chaque étiquette à la bonne personne, en vous aidant par exemple de la liste des participants ou de l’ordre dans lequel ils se présentent. Le plus clair est de définir une petite table de correspondance directement dans votre code :
minutes.py
# minutes.py — turn the diarized result into text an LLM can summarize
NAMES = {"Speaker 1": "Dana", "Speaker 2": "Omar", "Speaker 3": "Lee"} # you decide who is who
def clock(seconds):
m, s = divmod(int(seconds), 60)
h, m = divmod(m, 60)
return f"{h}:{m:02}:{s:02}" if h else f"{m}:{s:02}"
def meeting_text(result):
lines = []
for segment in result["segments"]:
who = NAMES.get(segment.get("speaker"), segment.get("speaker", "Unknown"))
lines.append(f'[{clock(segment["start"])}] {who}: {segment["text"]}')
return "\n".join(lines)
PROMPT = """Below is a meeting transcript with timestamps. Write: (1) a five-line summary,
(2) decisions, (3) action items as "owner - task - [timestamp]". Use only what is in the transcript.
"""
# Send PROMPT + meeting_text(result) to the model you use.
Générer le compte rendu et les actions à suivre
KolWrite produit la transcription horodatée et étiquetée par locuteur ; les résumés et les actions viennent du LLM que vous utilisez déjà. Gardez les horodatages dans le texte pour que chaque action renvoie au moment où elle a été dite, et demandez au modèle de n’utiliser que le contenu de la transcription.
Appels enregistrés avec un interlocuteur par canal
Si vos appels téléphoniques sont enregistrés en stéréo (par exemple le conseiller à gauche et le client à droite), vous n’avez pas besoin de la diarisation : séparez directement les voix par canal. Cette option prend en charge de 2 à 8 canaux et ne peut pas être activée en même temps que include_diarization.
{
"audio_url": "https://example.com/support-call.wav",
"model": "oracle",
"channel_speaker_separation": "standard",
"channel_labels": { "0": "Agent", "1": "Customer" },
"output_format": "json"
}
Passez sur overlap plutôt que standard lorsque les participants se coupent la parole. Le tarif du modèle s’applique alors soit à la durée de l’enregistrement, soit au cumul de parole détectée sur l’ensemble des canaux, selon le chiffre le plus élevé.
Combien ça coûte
| Tâche | Modèle | Coût |
|---|---|---|
| Réunion d’une heure avec identification des locuteurs | oracle | 1,44 US$ |
| La même réunion avec la diarisation Pro (audio difficile) | oracle + pro_diarization | 1,68 US$ |
| 30 minutes, audio difficile, avec diarisation Pro | oracle_max + pro_diarization | 1,92 US$ |
La diarisation standard et la séparation des canaux en mode standard sont incluses sans surcoût. Détail des tarifs : /llms/pricing.md.
Points de vigilance
- Une réunion contient des données personnelles : prévenez les participants qu’ils sont enregistrés et que l’échange sera transcrit, et sécurisez les textes produits aussi soigneusement que les fichiers audio.
- Il est plus compliqué de distinguer les intervenants quand les voix se chevauchent, que des timbres se ressemblent ou que les micros sont mauvais. Sur un enregistrement difficile, tentez l’option
pro_diarizationou la séparation de canaux. - Lorsque toute la réunion se déroule dans la même langue, renseignez explicitement le paramètre
language(la détection automatique retient une seule langue pour l’ensemble du fichier). - Avant d’agir sur la base du compte rendu, prenez le temps de relire vous-même les noms, les chiffres et les décisions.
Questions et réponses
Comment transcrire un enregistrement Zoom avec le nom des participants ?
Récupérez l’enregistrement et envoyez-le à POST /transcribe avec include_diarization: true. Dans votre code, faites correspondre Speaker 1, Speaker 2, etc. aux vrais noms. L’API sépare les voix ; c’est vous qui gérez l’attribution des noms.
Peut-elle rejoindre un appel Google Meet ou Teams ?
Non. KolWrite traite uniquement les fichiers enregistrés que vous lui envoyez. Il ne fait pas de transcription en direct et ne se connecte pas aux réunions.
Génère-t-elle aussi le compte rendu et les actions à suivre ?
Non, elle fournit uniquement la transcription horodatée avec l’étiquette de chaque locuteur. À vous de passer ce texte à votre propre LLM pour en tirer un compte rendu et des actions.
Comment traiter un appel téléphonique à deux interlocuteurs ?
Si chaque voix est sur une piste séparée, utilisez channel_speaker_separation avec channel_labels plutôt que la diarisation.
Quelles langues sont prises en charge pour les réunions ?
Les 100 langues figurant dans la liste des langues, y compris l’hébreu et l’arabe. Si toute la réunion se tient dans une seule langue, précisez-la dans le paramètre language.