Speech to text Whisper
6 min readMar 24, 2023
Ukázka transkripce projevu Andreje Babiše

Ochutnávka překladu projevu Andreje Babiše prostřednictvím https://github.com/openai/whisper
whisper $ whisper audio.mp3 --model medium
100%|█████████████████████████████████████| 1.42G/1.42G [05:02<00:00, 5.05MiB/s]
/opt/homebrew/lib/python3.10/site-packages/whisper/transcribe.py:114: UserWarning: FP16 is not supported on CPU; using FP32 instead
warnings.warn("FP16 is not supported on CPU; using FP32 instead")
Detecting language using up to the first 30 seconds. Use `--language` to specify the language
Detected language: Czech
[00:00.000 --> 00:06.400] Pane premiére, já jsem se přihlásil, abych na vás promluvil, abych vás vyzval.
[00:06.400 --> 00:12.200] Vy jste vždycky říkal, že já rozdělují národ, že jsem populista.
[00:12.200 --> 00:18.600] Ano, populismus je politický přístup v počívajících snaze oslovit běžného človeka,
[00:18.600 --> 00:22.800] který se domnívá, že vládnoucí skupiny nehají nebo přehliší o zájem.
[00:22.800 --> 00:24.600] Já jsem hrdý populista.
[00:24.600 --> 00:27.000] Ano, já tady hajím duchodce.
[00:27.000 --> 00:34.400] 7 000 korun, pane premiére, potěsem a řekněte, že jste byl uveden v omyl.
[00:34.400 --> 00:40.600] A zkuste spojit, aspoň na chvíli, na chvíli, ty dvě půlky.
[00:40.600 --> 00:42.800] Váš prezident vyhral.
[00:42.800 --> 00:46.200] Já jsem měl 2,4 mena hlasu.
[00:46.200 --> 00:53.000] Řekněte, že těch 19 miliár, které pan Stanjura přece má, kde je tady.
[00:53.000 --> 00:54.600] Uždy to je směšné.
[00:54.600 --> 00:58.200] Kolik máte, pane ministře, příjem?
[00:58.200 --> 01:02.200] Výdaje 2223 miliard.
[01:02.200 --> 01:04.600] To je 0,85%.
[01:04.600 --> 01:09.000] Vy jste to přece řekl na tiskovce, že je to o ničem, že jsou to drobné.
[01:09.000 --> 01:11.000] 19 miliard.
[01:11.000 --> 01:14.800] Tak pane premiére, přijďte sem, ukončíme to.
[01:14.800 --> 01:19.400] Řekněte, že jste rozhodl jako premiér, že to stavujete,
[01:19.400 --> 01:23.200] že těch 19 miliard dáte tým důchodcům.
[01:23.200 --> 01:25.200] Máte historickou šanci to spojit.
[01:25.200 --> 01:29.800] A pokud to neuděláte, já jsem nikdy neorganizoval žádnou demonstraci.
[01:29.800 --> 01:32.200] Tady každý mluví o ústavním soudu.
[01:32.200 --> 01:37.600] Ale prezident rozhodne, protože když 14 ní si veme a dá na to veto,
[01:37.600 --> 01:40.400] a já zorganizuju první demonstraci důchodců,
[01:40.400 --> 01:43.200] protože mám vstřed zájmu, je mi 68.
[01:43.200 --> 01:46.400] A podle vás bych už neměl pracet a budu pracovat.
[01:46.400 --> 01:48.200] Teda už jsem záv.
[01:48.200 --> 01:50.200] Udělejte to tam, pan premiére,
[01:50.200 --> 01:52.200] protože ten prezident, pokud je růzumný,
[01:52.200 --> 01:55.400] tak to spojí a on do toho hodí vidle.
[01:55.400 --> 01:57.800] Já vám za to děkuju, vrátě se prosím vás.
[01:57.800 --> 02:00.200] Řekněte, že je to nesmysl, 19 miliard,
[02:00.200 --> 02:02.200] taková ostuda, co se tady dělá.
[02:02.200 --> 02:04.200] Neuvěřitelné.
Pokus č. 2 s whisper.cpp
https://github.com/ggerganov/whisper.cpp
whisper.cpp $ yt-dlp -o "audio.mp3" -f 'ba' -x --audio-format mp3 "https://www.youtube.com/watch?v=3ZMMVE6kjK0" && ffmpeg -i audio.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav && ./main -m models/ggml-large.bin --language auto -f output.wav
[youtube] Extracting URL: https://www.youtube.com/watch?v=3ZMMVE6kjK0
[youtube] 3ZMMVE6kjK0: Downloading webpage
[youtube] 3ZMMVE6kjK0: Downloading android player API JSON
[info] 3ZMMVE6kjK0: Downloading 1 format(s): 251
[download] audio.mp3 has already been downloaded
[ExtractAudio] Not converting audio audio.mp3; file is already in target format mp3
ffmpeg version 5.1.2 Copyright (c) 2000-2022 the FFmpeg developers
built with Apple clang version 14.0.0 (clang-1400.0.29.202)
configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/5.1.2_6 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libaribb24 --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libsvtav1 --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-neon
libavutil 57. 28.100 / 57. 28.100
libavcodec 59. 37.100 / 59. 37.100
libavformat 59. 27.100 / 59. 27.100
libavdevice 59. 7.100 / 59. 7.100
libavfilter 8. 44.100 / 8. 44.100
libswscale 6. 7.100 / 6. 7.100
libswresample 4. 7.100 / 4. 7.100
libpostproc 56. 6.100 / 56. 6.100
Input #0, mp3, from 'audio.mp3':
Metadata:
encoder : Lavf59.27.100
Duration: 00:02:04.85, start: 0.023021, bitrate: 82 kb/s
Stream #0:0: Audio: mp3, 48000 Hz, stereo, fltp, 82 kb/s
Metadata:
encoder : Lavc59.37
File 'output.wav' already exists. Overwrite? [y/N] y
Stream mapping:
Stream #0:0 -> #0:0 (mp3 (mp3float) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, wav, to 'output.wav':
Metadata:
ISFT : Lavf59.27.100
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 16000 Hz, mono, s16, 256 kb/s
Metadata:
encoder : Lavc59.37.100 pcm_s16le
size= 3900kB time=00:02:04.80 bitrate= 256.0kbits/s speed= 739x
video:0kB audio:3900kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.001953%
whisper_init_from_file_no_state: loading model from 'models/ggml-large.bin'
whisper_model_load: loading model
whisper_model_load: n_vocab = 51865
whisper_model_load: n_audio_ctx = 1500
whisper_model_load: n_audio_state = 1280
whisper_model_load: n_audio_head = 20
whisper_model_load: n_audio_layer = 32
whisper_model_load: n_text_ctx = 448
whisper_model_load: n_text_state = 1280
whisper_model_load: n_text_head = 20
whisper_model_load: n_text_layer = 32
whisper_model_load: n_mels = 80
whisper_model_load: f16 = 1
whisper_model_load: type = 5
whisper_model_load: mem required = 3336.00 MB (+ 71.00 MB per decoder)
whisper_model_load: adding 1608 extra tokens
whisper_model_load: model ctx = 2950.97 MB
whisper_model_load: model size = 2950.66 MB
whisper_init_state: kv self size = 70.00 MB
whisper_init_state: kv cross size = 234.38 MB
system_info: n_threads = 4 / 12 | AVX = 0 | AVX2 = 0 | AVX512 = 0 | FMA = 0 | NEON = 1 | ARM_FMA = 1 | F16C = 0 | FP16_VA = 1 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 0 | VSX = 0 |
main: processing 'output.wav' (1996916 samples, 124.8 sec), 4 threads, 1 processors, lang = auto, task = transcribe, timestamps = 1 ...
whisper_full_with_state: auto-detected language: cs (p = 0.910472)
[00:00:00.000 --> 00:00:06.240] Pane premiére, já jsem se přihlásil, abych na vás promluvil, abych vás vyzval.
[00:00:06.240 --> 00:00:12.080] Vy jste vždycky říkal, že já rozděluji národ, že jsem populista.
[00:00:12.080 --> 00:00:18.520] Ano, populismus je politický přístup, počívající s naze oslovit běžného člověka,
[00:00:18.520 --> 00:00:22.760] který se domnívá, že vládnoucí skupiny nehájí nebo přehlíší jeho zájem.
[00:00:22.760 --> 00:00:24.360] Já jsem hrdý populista.
[00:00:24.360 --> 00:00:26.880] Ano, já tady hájím duchotce.
[00:00:26.880 --> 00:00:34.280] 7 000 korun, pane premiére, pojďte sem a řekněte, že jste byl uveden v omil.
[00:00:34.280 --> 00:00:40.560] A zkuste spojit aspoň na chvíli ty dvě půlky.
[00:00:40.560 --> 00:00:46.040] Váš prezident vyhral, já jsem měl 2,4 milina hlasů.
[00:00:46.040 --> 00:00:51.960] Řekněte, že těch 19 miliard, které pan Staňura přece má,
[00:00:51.960 --> 00:00:57.960] kde je, tady, vždyť to je směšné, kolik máte, pane ministře, příjem,
[00:00:57.960 --> 00:01:04.560] výdaje 2223 miliard, to je 0,8 procenta.
[00:01:04.560 --> 00:01:10.960] Vy jste to přece řekl na tiskovce, že je to o ničem, že jsou to drobné, 19 miliard.
[00:01:10.960 --> 00:01:17.840] Tak, pane premiére, přijďte sem, ukončíme to, řekněte, že jste rozhodl jako premiér,
[00:01:17.840 --> 00:01:23.080] že to stahujete, že těch 19 miliard dáte tým důchodcům.
[00:01:23.080 --> 00:01:25.080] Máte historickou šanci to spojit.
[00:01:25.080 --> 00:01:29.680] A pokud to neuděláte, já jsem nikdy neorganizoval žádnou demonstraci.
[00:01:29.680 --> 00:01:31.680] Tady každý mluví o ústavním soudu.
[00:01:31.680 --> 00:01:37.280] Ale prezident rozhodne, protože když 14 dní si veme a dá na to veto,
[00:01:37.280 --> 00:01:43.080] a já zorganizuju první demonstraci důchodců, protože mám střed zájmu, je mi 68,
[00:01:43.080 --> 00:01:46.280] a podle vás bych už neměl pracovat a budu pracovat.
[00:01:46.280 --> 00:01:52.280] Udělejte to tam, pane premiére, protože ten prezident, pokud je rozumný,
[00:01:52.280 --> 00:01:55.280] tak to spojí a on do toho hodí vidle.
[00:01:55.280 --> 00:01:57.280] Já vám za to děkuji. Vrátě se, prosím vás.
[00:01:57.280 --> 00:02:03.280] Řekněte, že je to nesmysl, 19 miliard, taková ostuda, co se tady děje. Neuvěřitelné.
[00:02:03.280 --> 00:02:05.280] (Potlesk)
whisper_print_timings: load time = 917.41 ms
whisper_print_timings: fallbacks = 0 p / 0 h
whisper_print_timings: mel time = 162.76 ms
whisper_print_timings: sample time = 290.98 ms / 734 runs ( 0.40 ms per run)
whisper_print_timings: encode time = 24850.35 ms / 7 runs ( 3550.05 ms per run)
whisper_print_timings: decode time = 26417.17 ms / 735 runs ( 35.94 ms per run)
whisper_print_timings: total time = 52703.86 ms