WhisperX : horodatage mot à mot et locuteurs
WhisperX est une surcouche libre (licence BSD-2-Clause, plus de 24 000 étoiles sur GitHub) autour de Whisper qui ajoute deux choses : un alignement forcé par modèle phonétique pour un horodatage mot à mot réellement exact, et une séparation des locuteurs via pyannote-audio. Le tout tourne en local, avec une inférence groupée annoncée par le projet jusqu'à 70 fois plus rapide que le temps réel avec Whisper large-v2 — au prix de trois modèles à charger plutôt qu'un seul.
Whisper transcrit très bien et horodate approximativement. WhisperX ajoute deux choses qui changent tout dès qu'on sort du simple document : un alignement forcé qui donne un horodatage mot à mot réellement exact, et une séparation des locuteurs qui indique qui a parlé quand. C'est ce qui transforme une transcription en sous-titres utilisables et en compte rendu de réunion lisible.
#Ce que Whisper seul ne résout pas
WhisperX est une surcouche libre, sous licence BSD-2-Clause, qui ajoute à Whisper deux choses que le modèle seul ne fournit pas : un horodatage mot à mot obtenu par alignement forcé avec un modèle wav2vec2, et une étiquette de locuteur produite par un modèle pyannote. Il vous faut WhisperX si vous fabriquez des sous-titres qui doivent tomber au bon moment ou un compte rendu de réunion où l'on voit qui a parlé. Si vous ne voulez que du texte, Whisper seul ou faster-whisper suffit. Le coût est de trois modèles à charger au lieu d'un, d'un jeton d'accès Hugging Face pour la séparation des locuteurs, et de limites documentées : les nombres et montants ne sont pas alignés, la parole simultanée est mal gérée, et la séparation des locuteurs reste imparfaite. Le tout tourne en local, sur GPU comme sur processeur ou sur Mac.
Whisper produit un excellent texte. Ses faiblesses apparaissent dès qu'on veut autre chose que du texte. Selon le dépôt WhisperX, les horodatages de Whisper sont donnés par énoncé et non par mot, et peuvent être décalés de plusieurs secondes : invisible dans un document, inacceptable en sous-titrage, où un sous-titre qui arrive un temps trop tard est pire que pas de sous-titre du tout. Et Whisper n'a aucune notion de locuteur : deux heures de réunion reviennent en un monologue indifférencié.
WhisperX répond aux deux en ajoutant des étapes plutôt qu'en remplaçant le modèle. C'est ce choix de conception qui préserve la qualité de transcription que vous connaissez. Le projet, publié sous licence BSD-2-Clause, dépasse aujourd'hui les 24 000 étoiles sur GitHub — un signe que le besoin qu'il couvre, horodater et attribuer une transcription, dépasse largement le cas du sous-titrage.
#Les trois étapes
Ton ChatGPT privé et gratuit sur ta machine en 1 heure — LM Studio, Ollama, Open WebUI, tes documents, sans cloud.
- Espace en ligne à vie
- PDF + fichiers
- Mises à jour à vie
| Étape | Rôle | Ce qu'il lui faut |
|---|---|---|
| Détection de voix (VAD) | Le signal est découpé en zones de parole avant la transcription | Un détecteur de parole (pyannote par défaut, silero en option) |
| Transcription | L'audio devient du texte, via faster-whisper, une implémentation rapide de Whisper | Un modèle Whisper : sa taille décide qualité et mémoire (le défaut de la ligne de commande est small) |
| Alignement forcé | Chaque mot est repositionné exactement dans l'audio, via wav2vec2 | Un modèle phonétique propre à la langue |
| Séparation des locuteurs | L'audio est découpé par voix et les tours étiquetés, via pyannote-audio | Le modèle pyannote speaker-diarization-community-1 par défaut, dont l'accès demande d'accepter des conditions |
La détection de voix a un double rôle : le dépôt indique qu'elle réduit les hallucinations et permet de grouper les segments sans dégrader le taux d'erreur mot. L'étape d'alignement est celle qu'on sous-estime. C'est elle qui rend l'horodatage mot à mot digne de confiance, en s'appuyant sur un modèle wav2vec2 pour caler chaque mot sur sa position réelle dans le signal audio. Elle dépend de la langue : le dépôt précise qu'un modèle wav2vec2 propre à la langue est nécessaire, et que des modèles par défaut existent pour l'anglais, le français, l'allemand, l'espagnol et l'italien, plus de nombreuses autres langues via Hugging Face. Pour une langue absente de la liste, il faut trouver soi-même un modèle phonétique et le tester. La transcription elle-même bénéficie d'une inférence groupée : le projet annonce jusqu'à 70 fois le temps réel avec le modèle large-v2, sans préciser le matériel dans son README. Prenez ce chiffre comme un plafond à vérifier sur votre machine.
#La séparation des locuteurs, sans illusion
L'étiquetage fonctionne en regroupant les caractéristiques vocales sur l'ensemble de l'enregistrement, via pyannote-audio. Le modèle par défaut de WhisperX est aujourd'hui speaker-diarization-community-1, publié sous licence CC-BY-4.0, qui ingère un signal audio mono à 16 kHz (la stéréo est convertie en mono, les autres fréquences rééchantillonnées). La fiche du modèle affirme qu'il fait beaucoup mieux que l'ancien pipeline 3.1. Le dépôt WhisperX est franc sur les limites : la parole qui se chevauche n'est gérée que médiocrement, et la séparation reste « loin d'être parfaite ». Les erreurs de diarisation publiées par pyannote le montrent : 11,7 % sur AISHELL-4, 17,0 % sur AMI (micros individuels), 19,9 % sur AMI (micro distant), 26,7 % sur CALLHOME (partie 2) et 46,8 % sur Ego4D, selon le corpus. Ce sont des corpus académiques, pas vos enregistrements, mais l'ordre de grandeur dit qu'une relecture reste nécessaire. La situation se dégrade précisément là où les réunions se compliquent : des gens qui se coupent la parole, quelqu'un loin du micro, des voix proches.
Deux remarques pratiques. On peut indiquer un nombre minimal et maximal de locuteurs (options --min_speakers et --max_speakers), et le dépôt le recommande quand on le connaît : le modèle n'a plus à le deviner. Et les étiquettes sont anonymes par construction : le système dit qu'il y avait trois voix et quels tours appartiennent à chacune, pas qui elles sont. Associer une étiquette à un nom est une étape manuelle — et c'est aussi le moment où la transcription devient une donnée personnelle.
#La précision réelle, pas celle du benchmark
La transcription elle-même mérite un chiffre, parce que le benchmark habituel donne une image trop flatteuse. Selon VexaScribe, un service de transcription commercial, Whisper large-v3 atteint environ 2,7 % de taux d'erreur mot sur LibriSpeech test-clean, un jeu d'audio propre à un seul locuteur. Sur de l'audio anglais réel — réunions, podcasts, appels —, le même site situe ce taux autour de 8 à 12 %. Ce sont des ordres de grandeur publiés par un acteur du secteur, valables pour l'anglais : ils ne disent rien de vos enregistrements en français. WhisperX n'améliore pas la transcription elle-même, qui reste celle de Whisper : ce qu'il ajoute, c'est de savoir exactement où se trouve chaque mot et qui l'a prononcé, deux informations que ce taux d'erreur ne capture pas.
| Besoin | Outil |
|---|---|
| Texte brut, rapide | Whisper seul ou une implémentation rapide comme faster-whisper |
| Sous-titres qui tombent au bon moment | WhisperX : l'alignement est toute la raison d'être |
| Compte rendu avec qui a dit quoi | WhisperX avec la séparation des locuteurs activée |
| Transcription en direct, faible latence | Un moteur orienté flux ; cette chaîne est faite pour des fichiers |
#Ce que ça demande
- La taille du modèle Whisper décide de tout
- Un grand modèle donne le meilleur texte et demande le plus de mémoire ; le dépôt note qu'un modèle plus grand améliore la précision des horodatages au prix de plus de mémoire GPU, alors qu'un modèle d'alignement plus grand n'aide guère.
- Trois modèles se chargent, pas un
- La mémoire culmine quand transcription, alignement et séparation sont tous résidents. L'exemple Python du dépôt libère chaque modèle après son étape (collecte de mémoire puis torch.cuda.empty_cache()), remède classique sur une petite carte.
- Sans GPU, sur Mac compris
- Le dépôt donne la ligne de commande pour le processeur et pour macOS : --compute_type int8 --device cpu. Il ne publie aucun temps de traitement sur processeur : mesurez sur un extrait avant de planifier un lot. Avec un GPU NVIDIA, il demande le kit CUDA 12.8, et le projet indique moins de 8 Go de mémoire pour large-v2 avec beam_size=5.
- Le traitement par lots aide
- Le lot est la raison de la vitesse annoncée : le défaut de la ligne de commande est --batch_size 8. Le baisser (le dépôt cite 4) libère de la mémoire GPU.
#Installer et lancer une transcription
L'installation se fait via pip ; le paquet demande Python 3.10 à 3.13. La ligne de commande écrit par défaut tous les formats disponibles (srt, vtt, txt, tsv, json, aud), et l'option --highlight_words True souligne chaque mot au moment où il est prononcé dans les sous-titres SRT et VTT. Le JSON inclut les étiquettes de locuteur quand la séparation est activée.
- 01Installer WhisperXpip install whisperx installe le paquet ; avec un GPU NVIDIA, installer d'abord le kit CUDA 12.8, selon le dépôt. Le dépôt ajoute qu'il peut falloir installer aussi ffmpeg, en renvoyant aux instructions d'installation de Whisper.
- 02Transcrire et alignerLancer une première passe avec un modèle Whisper de taille moyenne (le défaut est small), en précisant la langue si elle est connue à l'avance : sans elle, la langue est détectée automatiquement, et le modèle d'alignement en dépend.
- 03Activer la séparation si besoinAjouter --diarize et le jeton d'accès Hugging Face obtenu après acceptation des conditions du modèle pyannote, et indiquer le nombre de locuteurs si vous le connaissez.
- 04Relire le fichier de sortieOuvrir le SRT ou le JSON produit et vérifier quelques passages au hasard, en particulier les tours de parole aux moments où plusieurs personnes parlent presque en même temps.
- Whisper en local : la transcription de base
- Produire un compte rendu de réunion en local
- Assistant vocal local : la chaîne complète
- Transcription de consultations avec Whisper
#Ce que l'alignement ne saura pas horodater
Le dépôt liste des limites à connaître avant de promettre des sous-titres parfaits. La première tient aux chiffres : les mots dont les caractères ne figurent pas dans le dictionnaire du modèle d'alignement, par exemple « 2014. » ou « £13.60 », ne peuvent pas être alignés et n'ont donc aucun horodatage. Sur une réunion pleine de montants et de dates, ces mots ressortent sans temps propre dans le SRT. La deuxième est la parole simultanée, mal gérée par Whisper comme par WhisperX. La troisième est la langue : il faut un modèle wav2vec2 spécifique.
Deux différences avec Whisper d'origine expliquent aussi des écarts de texte. Pour tenir en une seule passe par lot, l'inférence se fait sans horodatages Whisper, ce qui, prévient le dépôt, peut créer des divergences avec la sortie par défaut. Et l'option condition_on_prev_text est désactivée par défaut pour réduire les hallucinations. Depuis 2026, l'option --interleaved_context rétablit un contexte continu entre segments, utile pour la ponctuation et le vocabulaire technique selon le projet, mais elle est récente : testez-la sur un extrait avant de l'adopter.
#Cas d'usage concrets
- Sous-titrage de vidéos de formation
- Un horodatage mot à mot évite les sous-titres qui traînent une phrase entière derrière la voix, un défaut immédiatement visible et pénible sur un contenu pédagogique.
- Compte rendu de réunion à plusieurs voix
- La séparation des locuteurs permet de reconstituer qui a proposé quoi, une information qu'un résumé sans attribution ne peut pas restituer fidèlement.
- Podcasts et interviews longues
- L'inférence groupée est faite pour les enregistrements longs : c'est ce que le titre de l'article des auteurs, « Time-Accurate Speech Transcription of Long-Form Audio », annonce.
- Archives audio à indexer
- Un texte horodaté au mot près permet de faire pointer une recherche directement sur l'instant exact de l'enregistrement, pas seulement sur le document entier.
- Extraits pour les réseaux sociaux
- Repérer le passage exact où une phrase marquante est prononcée, au mot près, facilite le découpage d'un court extrait sans repasser toute la vidéo à l'oreille.
Un point commun à ces cas : aucun n'a besoin de transcription en temps réel. C'est un fichier déjà enregistré qui est traité après coup, ce qui laisse le temps à l'inférence groupée de faire son travail sans contrainte de latence. Le jour où le besoin devient du sous-titrage en direct — une conférence retransmise, un appel en cours — WhisperX n'est plus le bon outil, quelle que soit la puissance de la machine disponible.
#La transcription est une entrée, pas un livrable
Dans la quasi-totalité des cas réels, la transcription n'est pas le but : elle alimente un modèle local qui en tire un compte rendu, un relevé de décisions ou un résumé. Cela a une conséquence sur la qualité attendue : une erreur de transcription sur un mot rare compte moins que la structure des tours de parole, parce que c'est cette structure qui permet au modèle d'attribuer correctement ce qui a été dit.
Concrètement, un flux de production raisonnable sépare les deux métiers : WhisperX produit un texte horodaté et étiqueté par locuteur, puis un modèle de langage distinct relit ce texte pour en tirer un résumé structuré. Mélanger les deux dans un seul appel — demander à un modèle de résumer directement l'audio — prive le pipeline de la précision d'horodatage que WhisperX a justement pour vocation d'apporter, et rend plus difficile la vérification a posteriori d'un passage précis.
Autre avantage : la transcription se fait une seule fois, puis se réutilise pour plusieurs livrables — compte rendu court, relevé de décisions, sous-titres — sans repasser par l'audio. Le texte horodaté et étiqueté devient la source de vérité.
- Source : dépôt officiel WhisperX sur GitHub
- Source : modèle de séparation des locuteurs pyannote community-1
- Source : VexaScribe, taux d'erreur mot de Whisper large-v3 (service commercial)
- Source : whisperx sur PyPI
#FAQ
WhisperX est-il gratuit ?+
Quelle est la fiabilité de la séparation des locuteurs ?+
Faut-il un GPU ?+
WhisperX ou Whisper seul ?+
Fonctionne-t-il en français ?+
Peut-il transcrire en direct ?+
Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.