Créer des sous-titres SRT depuis un audio sur Mac
Créer des sous-titres SRT ou VTT depuis un fichier audio sur Mac avec ffmpeg et whisper.cpp, corriger la synchro et les retours à la ligne, ou le faire en une étape.
Vous pouvez transformer n'importe quel fichier audio sur un Mac en fichier de sous-titres SRT ou VTT synchronisé, sans le téléverser nulle part. Ce guide parcourt la route gratuite par le Terminal (ffmpeg plus whisper.cpp), montre comment corriger la synchronisation et la longueur des lignes quand le premier résultat n'est pas tout à fait juste, et se termine par une option en une étape pour ceux qui préfèrent ne pas maintenir cette installation. À la fin, vous aurez un fichier de sous-titres à charger dans un logiciel de montage, un lecteur multimédia ou une page web. Si votre source est une vidéo plutôt qu'un fichier audio, le chemin le plus court est de transcrire la vidéo en texte et d'exporter les sous-titres en une seule passe.
Ce qu'est réellement un fichier SRT
Le SRT est du texte brut. Chaque sous-titre est un bloc : un numéro de séquence, une heure de début et de fin, une ou deux lignes de texte, et une ligne vide.
1
00:00:01,200 --> 00:00:04,000
Welcome back, and thanks for joining us today.
2
00:00:04,200 --> 00:00:07,500
Let's start with the numbers from last quarter.
Le VTT (WebVTT) est presque le même format, avec un en-tête WEBVTT et des points au lieu des virgules dans les horodatages. Les navigateurs utilisent le VTT pour l'élément HTML <track> ; la plupart des lecteurs de bureau et des logiciels de montage acceptent les deux. Comme les deux sont du texte brut, vous pouvez les ouvrir dans n'importe quel éditeur et corriger un mot ou un horodatage à la main.
Route 1 : ffmpeg et whisper.cpp dans le Terminal
whisper.cpp est une implémentation open source du modèle vocal Whisper d'OpenAI qui tourne bien sur Apple Silicon. Il peut écrire directement du SRT et du VTT, donc toute la chaîne se résume à : convertir l'audio, lancer le modèle, ouvrir le fichier. Si vous voulez le contexte complet sur l'installation et le réglage de whisper.cpp, lisez Exécuter Whisper localement sur un Mac ; les étapes ci-dessous sont le chemin le plus court vers un fichier de sous-titres.
Étape 1 : installer Homebrew, ffmpeg et whisper.cpp
Si vous n'avez pas encore Homebrew, installez-le depuis brew.sh en collant dans le Terminal la commande d'une ligne affichée sur cette page. Ensuite :
brew install ffmpeg
brew install whisper-cpp
Au moment de l'écriture, la formule Homebrew installe une commande appelée whisper-cli. Les versions plus anciennes utilisaient le nom whisper-cpp. Si l'un des noms est introuvable, essayez l'autre, ou lancez brew info whisper-cpp pour voir ce qui a été installé.
Étape 2 : télécharger un modèle
whisper.cpp a besoin d'un fichier de modèle au format ggml. Le dépôt whisper.cpp liste les modèles disponibles et un script de téléchargement. Un moyen rapide est d'en récupérer un directement dans un dossier dont vous vous souviendrez :
mkdir -p ~/whisper-models
cd ~/whisper-models
curl -L -o ggml-base.en.bin \
https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.en.bin
base.en est petit et rapide, assez bon pour de l'anglais clair. Pour d'autres langues ou pour une meilleure précision sur un audio difficile, prenez un modèle small, medium ou large dans la même liste. Les modèles plus grands sont plus lents et consomment plus de mémoire, alors commencez petit et montez seulement si la transcription l'exige.
Étape 3 : convertir l'audio en WAV mono 16 kHz
whisper.cpp attend du WAV mono 16 bits à 16 kHz. ffmpeg fait la conversion depuis presque n'importe quelle entrée (MP3, M4A, WAV, FLAC, OGG, ou la piste audio d'un fichier vidéo) :
ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le input.wav
Remplacez input.mp3 par votre fichier. Si vous partez d'une vidéo, utilisez le fichier vidéo comme entrée ; ffmpeg prendra la piste audio et ignorera l'image.
Étape 4 : générer le SRT et le VTT
Lancez le modèle sur le WAV en demandant une sortie sous-titres :
whisper-cli -m ~/whisper-models/ggml-base.en.bin -f input.wav -osrt -ovtt
-osrt écrit input.wav.srt et -ovtt écrit input.wav.vtt à côté de l'audio. Ajoutez -l de (ou un autre code de langue) si la parole n'est pas en anglais et que vous utilisez un modèle multilingue. Les noms d'options viennent du README de whisper.cpp au moment de l'écriture ; whisper-cli --help affiche la liste actuelle en cas de différence.
Étape 5 : vérifier le résultat
Ouvrez le SRT dans un éditeur de texte et parcourez-le. Chargez-le ensuite dans un lecteur qui prend en charge les sous-titres externes, à côté de l'audio ou de la vidéo d'origine, et regardez la première minute puis une minute au hasard au milieu. Vous vérifiez trois choses : les mots sont justes, chaque sous-titre apparaît au moment où les mots sont prononcés, et aucune ligne n'est assez longue pour déborder de l'écran.
Corriger la synchronisation et la longueur des lignes
La première sortie est en général proche, mais rarement parfaite. Voici les corrections qui couvrent la plupart des cas.
Les sous-titres sont systématiquement en avance ou en retard
Si chaque sous-titre est décalé de la même durée, l'audio que vous avez transcrit ne démarre pas au même moment que la vidéo à laquelle vous l'associez (une introduction coupée, par exemple). whisper.cpp propose une option de décalage qui déplace le point de départ en millisecondes ; consultez --help pour son nom actuel. À défaut, la plupart des éditeurs de sous-titres et beaucoup de lecteurs vidéo peuvent décaler un fichier entier d'une durée fixe. L'édition à la main fonctionne aussi pour un fichier court : les horodatages sont du texte brut.
Les lignes sont trop longues
Whisper a tendance à produire des segments qui font une phrase entière, ce qui peut représenter 15 mots ou plus. whisper.cpp propose une option pour plafonner la longueur maximale d'un segment en caractères, et une option liée pour couper aux frontières de mots plutôt qu'au milieu d'un mot. Une valeur autour de 42 caractères par ligne est une convention courante en sous-titrage. Relancez avec ces options plutôt que de corriger les lignes une par une.
Quelques segments sont faux
Corrigez-les dans l'éditeur de texte. Pour un enregistrement de 30 minutes, comptez une poignée de corrections avec un modèle base sur un audio propre, et nettement plus si l'audio est bruité, comporte plusieurs locuteurs, ou contient des noms et du jargon. Si vous faites beaucoup de corrections, essayez une fois un modèle plus grand avant de reprendre tout le fichier à la main.
Les longs silences produisent des segments étranges
Whisper peut générer une phrase répétée ou une ligne parasite pendant de longs silences ou de la musique. Coupez le silence de début avec ffmpeg avant de transcrire, et supprimez les blocs parasites ensuite. Renumérotez les numéros de séquence si vous supprimez des blocs ; certains lecteurs sont stricts là-dessus, et un petit script ou un éditeur de sous-titres peut renuméroter pour vous.
Incruster les sous-titres dans une vidéo
Si vous avez besoin d'un seul fichier vidéo avec les sous-titres inscrits dans l'image (pour les plateformes qui n'acceptent pas de fichier de sous-titres séparé), ffmpeg sait aussi le faire :
ffmpeg -i video.mp4 -vf subtitles=input.wav.srt output.mp4
Conservez tout de même le SRT comme fichier séparé. Des sous-titres incrustés ne peuvent être ni désactivés, ni modifiés, ni traduits plus tard, alors que le SRT, si. Si vous partez de la vidéo plutôt que d'un fichier audio, transcrire une vidéo en texte couvre le côté import ; pour comprendre pourquoi les sous-titres comptent pour votre public, voyez les sous-titres et les transcriptions comme outil d'accessibilité. Une conférence enregistrée avec une seule voix est le matériau le plus simple qui soit, et transcrire un sermon déroule le parcours de l'enregistrement aux sous-titres.
Ce que cette route vous coûte
Une fois installée, la route Terminal est gratuite et entièrement privée : rien ne quitte votre Mac. Le coût, c'est le temps et l'entretien. La première installation prend une demi-heure si tout se passe bien, davantage si Homebrew ou le téléchargement du modèle fait des siennes. Chaque nouveau fichier implique une étape de conversion, une exécution du modèle et une vérification dans un éditeur. Les noms de modèles, les options et les noms de binaires changent d'une version à l'autre, donc un script qui fonctionnait au printemps peut demander une petite correction à l'automne. Pour un travail ponctuel, cela va très bien. Si vous produisez des sous-titres chaque semaine, la charge s'accumule. Une production hebdomadaire signifie généralement une émission, et transcription de podcast et notes d'émission couvre le reste de ce flux de travail, de la transcription aux marqueurs de chapitres.
L'alternative en une étape
Questions fréquentes
Puis-je créer des sous-titres depuis un MP3 sans le convertir d'abord ?
Pas avec whisper.cpp, qui attend un WAV mono à 16 kHz. La commande ffmpeg ci-dessus prend quelques secondes et fonctionne sur les MP3, M4A, FLAC, OGG et fichiers vidéo. D'autres outils acceptent le MP3 directement, mais convertir d'abord est une habitude fiable, car cela permet aussi de couper le silence ou de normaliser le volume dans la même étape.
Quelle est la différence entre SRT et VTT ?
Les deux sont des formats de sous-titres en texte brut avec la même idée : des blocs numérotés avec une heure de début, une heure de fin et le texte. Le VTT commence par un en-tête WEBVTT, utilise des points dans les horodatages au lieu des virgules, et prend en charge une mise en forme et un positionnement que le SRT ne connaît pas. Utilisez le VTT pour la vidéo web et le SRT pour les lecteurs et les logiciels de montage. La conversion de l'un à l'autre est triviale et la plupart des outils écrivent les deux.
Pourquoi mes sous-titres sont-ils désynchronisés ?
Les causes habituelles sont un décalage constant (l'audio et la vidéo ne commencent pas au même point), une vidéo à fréquence d'images variable qui se lit légèrement plus vite ou plus lentement que l'audio, ou une transcription qui a dérivé pendant un long silence. Un décalage constant se corrige en décalant tout le fichier. La dérive se corrige en réencodant la vidéo à fréquence d'images constante avec ffmpeg, puis en transcrivant l'audio de ce fichier.
whisper.cpp fonctionne-t-il sur Apple Silicon ?
Oui. Apple Silicon est l'une des plateformes sur lesquelles il est développé, et les versions récentes peuvent utiliser le Neural Engine et le GPU via Core ML et Metal. Consultez le README du projet pour les options de compilation actuelles ; la formule Homebrew vous donne un fonctionnement par défaut sans aucune configuration.