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

comments powered by Disqus