Intermédiaire 14 minAudio

WhisperX : horodatage mot à mot et locuteurs

Réponse directe

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.

Par Mohamed Meguedmi·Màj 2026-09-29·Testé sur Windows, macOS, Linux

#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

Le kit IA Locale

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
Ce que fait chaque étape et ce qu'elle réclame
ÉtapeRôleCe qu'il lui faut
Détection de voix (VAD)Le signal est découpé en zones de parole avant la transcriptionUn détecteur de parole (pyannote par défaut, silero en option)
TranscriptionL'audio devient du texte, via faster-whisper, une implémentation rapide de WhisperUn 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 wav2vec2Un modèle phonétique propre à la langue
Séparation des locuteursL'audio est découpé par voix et les tours étiquetés, via pyannote-audioLe 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.

!
Traiter en local ne vaut pas consentement
Une transcription avec étiquetage des locuteurs est une donnée personnelle, qu'elle quitte ou non votre machine. Le traitement local est la bonne posture technique ; il ne dispense pas d'informer les personnes enregistrées et d'obtenir leur accord.
i
Les conditions d'accès, concrètement
Le modèle de séparation des locuteurs est hébergé sur Hugging Face. Le dépôt est public, mais la fiche exige d'accepter ses conditions pour accéder aux fichiers, puis de créer un jeton d'accès en lecture, à passer avec --hf_token. C'est gratuit, pas un paiement, mais une étape à ne pas découvrir au milieu d'un traitement en lot.

#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.

Choisir le bon outil selon le besoin
BesoinOutil
Texte brut, rapideWhisper seul ou une implémentation rapide comme faster-whisper
Sous-titres qui tombent au bon momentWhisperX : l'alignement est toute la raison d'être
Compte rendu avec qui a dit quoiWhisperX avec la séparation des locuteurs activée
Transcription en direct, faible latenceUn 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.
→
Manquer de mémoire GPU : trois leviers
Le dépôt liste trois moyens de réduire la mémoire : baisser --batch_size (par exemple à 4), choisir un modèle plus petit (--model base) ou un type de calcul plus léger (--compute_type int8). Les deux derniers peuvent dégrader la qualité, précise-t-il. Commencez donc par le lot.

#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.

  1. 01
    Installer WhisperX
    pip 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.
  2. 02
    Transcrire et aligner
    Lancer 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.
  3. 03
    Activer la séparation si besoin
    Ajouter --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.
  4. 04
    Relire le fichier de sortie
    Ouvrir 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.
Terminal
pip install whisperx

# Avec GPU : transcription, alignement et séparation des locuteurs
whisperx reunion.mp3 --model medium --language fr \
  --diarize --hf_token VOTRE_JETON --min_speakers 2 --max_speakers 5

# Sur processeur ou sur Mac
whisperx reunion.mp3 --model medium --language fr --compute_type int8 --device cpu

#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é.

#FAQ

WhisperX est-il gratuit ?+
Oui, c'est un projet libre sous licence BSD-2-Clause qui tourne localement et compte plus de 24 000 étoiles sur GitHub. La séparation des locuteurs utilise un modèle pyannote hébergé sur Hugging Face, dont il faut accepter les conditions et créer un jeton : gratuit, sans paiement, mais à prévoir avant le premier traitement en lot.
Quelle est la fiabilité de la séparation des locuteurs ?+
Correcte sur un audio propre à voix distinctes, plus fragile dès que les voix se chevauchent : le dépôt reconnaît que la séparation est « loin d'être parfaite ». Les erreurs publiées par pyannote vont de 11,7 % à 46,8 % selon le corpus. Indiquer le nombre minimal et maximal de locuteurs aide, et une relecture humaine reste nécessaire.
Faut-il un GPU ?+
Non : le dépôt donne la commande pour processeur et pour macOS (--compute_type int8 --device cpu), mais ne publie aucun temps de traitement dessus, donc mesurez d'abord. Avec un GPU NVIDIA, le projet annonce moins de 8 Go de mémoire pour large-v2 avec beam_size=5, et la mémoire culmine quand transcription, alignement et séparation sont chargés ensemble.
WhisperX ou Whisper seul ?+
Whisper seul si vous ne voulez que du texte, sans souci de synchronisation précise, par exemple pour indexer le contenu d'une interview. WhisperX dès que vous avez besoin d'un horodatage mot à mot pour des sous-titres qui tombent au bon moment, ou d'étiquettes de locuteurs pour retranscrire une réunion à plusieurs voix de façon lisible et exploitable.
Fonctionne-t-il en français ?+
Oui : le dépôt cite le français parmi les cinq langues (avec l'anglais, l'allemand, l'espagnol et l'italien) qui ont un modèle d'alignement par défaut. Passez --language fr. Pour une langue absente de cette liste, il faut trouver soi-même un modèle phonétique wav2vec2 et le tester avant de compter sur des horodatages mot à mot fiables.
Peut-il transcrire en direct ?+
Non, il est conçu pour des fichiers déjà enregistrés, pas pour un flux en direct. Le sous-titrage en direct demande un moteur orienté flux, avec un autre compromis entre latence et précision que celui recherché ici, et l'inférence groupée qui fait la vitesse de WhisperX sur un fichier entier n'a alors plus de sens sur un flux audio continu qui arrive morceau par morceau.
Ce guide vous a aidé ?

Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.