Transcription avec ffmpeg 8.0 et whisper.cpp
Une des nouveautés de ffmpeg 8.0 est le support natif de whisper. Il faut toutefois compiler les programmes pour activer cette fonctionalité, c'est le but de cet article, ce qui nous permettra de calculer nos premières transcriptions.
Compilation de ffmpeg 8.0 avec le support de Whisper
Ces tests ont été réalisés sous AlmaLinux 10 et Debian 13
Compilation de la dépendance whisper.cpp
1git clone https://github.com/ggml-org/whisper.cpp
2cd whisper.cpp
3sh ./models/download-ggml-model.sh small # modèles dispo: tiny, base, small, medium, large ...
4cmake -B build
5cmake --build build -j --config Release
6cd build
7sudo make install
Compilation de ffmpeg
1git clone https://github.com/aerogus/ffmpeg-compile
2cd ffmpeg-compile
3cp conf.ini.dist.sh conf.ini.sh
4# sed 's/export ENABLE_WHISPER=0/export ENABLE_WHISPER=1/' conf.ini.sh > conf.ini.sh # à debuguer
5./run.sh # fail
6cp /usr/local/lib/pkgconfig/whisper.pc ./build/lib/pkgconfig/
7./run.sh # mieux
Lancement de ffmpeg
Si ça compile mais le lancement plante de cette façon :
1$ ./ffmpeg
2./ffmpeg: error while loading shared libraries: libggml.so: cannot open shared object file: No such file or directory
Regardons les dépendances du binaire :
1$ ldd ffmpeg
2 linux-vdso.so.1 (0x00007f8a7d5b6000)
3 libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8a7d4b3000)
4 libggml.so => not found
5 libwhisper.so.1 => not found
Hackons en modifiant la variable d'environnement LD_LIBRARY_PATH :
1$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
2$ ./ffmpeg
3ffmpeg version 8.0 Copyright (c) 2000-2025 the FFmpeg developers
4 built with gcc 14 (Debian 14.2.0-19)
5 configuration: --prefix=/home/debian/src/ffmpeg-compile/build --pkg-config-flags=--static --extra-cflags=-I/home/debian/src/ffmpeg-compile/build/include --extra-ldflags=-L/home/debian/src/ffmpeg-compile/build/lib --extra-libs=-lpthread --extra-libs=-lm --bindir=/home/debian/src/ffmpeg-compile/bin --enable-gpl --enable-nonfree --enable-libmp3lame --enable-libvorbis --enable-libfdk_aac --enable-libopus --enable-libx264 --enable-libx265 --enable-libfribidi --enable-libfreetype --enable-libass --enable-libharfbuzz --enable-libfontconfig --enable-openssl --enable-libzimg --disable-ffplay --enable-whisper
6 libavutil 60. 8.100 / 60. 8.100
7 libavcodec 62. 11.100 / 62. 11.100
8 libavformat 62. 3.100 / 62. 3.100
9 libavdevice 62. 1.100 / 62. 1.100
10 libavfilter 11. 4.100 / 11. 4.100
11 libswscale 9. 1.100 / 9. 1.100
12 libswresample 6. 1.100 / 6. 1.100
13Universal media converter
14usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
15
16Use -h to get full help or, even better, run 'man ffmpeg'
Test d'une transcription
à partir d'une pige d'une station de radio. adaptez les chemins.
1$ ./ffmpeg -i pige.MP3 -af "whisper=model=$HOME/src/whisper.cpp/models/ggml-small.bin:language=auto:queue=3:destination=$HOME/whisper_output.srt:format=srt" -f null -
2
3(...)
4[Parsed_whisper_0 @ 0x7fd96c003200] run transcription at 179199 ms, 47786/47786 samples (2.99 seconds)...
5[Parsed_whisper_0 @ 0x7fd96c003200] run transcription at 182186 ms, 47787/47787 samples (2.99 seconds)...
6[Parsed_whisper_0 @ 0x7fd96c003200] run transcription at 185172 ms, 47787/47787 samples (2.99 seconds)...
7size=N/A time=00:03:08.15 bitrate=N/A speed=0.421x elapsed=0:07:27.12
- rapide que le temps réel avec le modèle
small
Le .srt généré :
141
200:02:02.452 --> 00:02:05.452
3C'est publié au Journal officiel, le Parlement est convoqué.
4
542
600:02:05.439 --> 00:02:08.399
7en session extraordinaire pour le vote de confiance du
8
943
1000:02:08.426 --> 00:02:10.966
11du gouvernement Bayrou le 8 septembre prochain.
12
1344
1400:02:11.412 --> 00:02:14.412
15D'ici là, le Premier ministre espère convaincre les partis politiciens.
16
1745
1800:02:14.399 --> 00:02:17.399
19sur son projet de budget. Il a 12 jours pour le faire.
Le choix du modèle influe directement sur la qualité de la transcription (orthographe, vocabulaire) et sur la vitesse de calcul :
avec le modèle small (vitesse temps réel * 0.99, rapide pas imprécis) :
14
200:00:11.946 --> 00:00:13.946
3Merci d'écouter les raffilles.
4
55
600:00:14.932 --> 00:00:17.432
7Une heure à Paris, 23h en temps universelle.
avec le modèle large-v3 (vitesse temps réel * 0.05, lent mais + précis) :
14
200:00:11.946 --> 00:00:14.746
3Merci d'écouter RFI.
4
55
600:00:14.932 --> 00:00:17.412
7Une heure à Paris, 23h en temps universel.
Ressources
- https://github.com/ggml-org/whisper.cpp implémentation open source de OpenAI Whisper en C/C++
- https://ffmpeg.org/ffplay-all.html#whisper-1
- https://medium.com/@vpalmisano/run-whisper-audio-transcriptions-with-one-ffmpeg-command-c6ecda51901f
- https://koji.fedoraproject.org/koji/buildinfo?buildID=2787947
- https://www.reddit.com/r/ffmpeg/comments/1my2laj/using_whisper_filter_in_ffmpeg_8/
- https://openai.com/fr-FR/index/whisper/
- https://www.phoronix.com/news/FFmpeg-Lands-Whisper
- https://github.com/openai/whisper OpenAI Whisper