В предшествующем сообщении я только что разсказалъ о том, для чего вообще может быть нужным автоматическое изготовление субтитров, а теперь перехожу к техническим подробностям того, как выглядит строка команды, запускающей FFmpeg.
Примѣрно вот как выглядит она:
ffmpeg -hide_banner -i имя_видеофайла -vn -sn -af "whisper=language=ru:destination=whispered.srt:format=srt:queue=30:use_gpu=0:vad_model=C\\:/путь/к/ggml-silero-v6.2.0.bin:model=C\\:/путь/к/ggml-large-v3.bin" -f null -
В этой команде параметр «имя_видеофайла» должен быть замѣнёнъ именем конкретного видеофайла (ну или аудиофайла), распознавание рѣчи из которого происходит.
В этой команде содержимое параметров «format=srt» и «whispered.srt» означает, что субтитры будут записаны в файл «whispered.srt». Никто ещё не научил Whisper (и FFmpeg) сразу создавать субтитры в каком-нибудь другом формате — ни в «.ass», ни в «.vtt». (А вот если не «сразу», а «потóм», то тогда в том же FFmpeg, уж конечно, нетрудно перегнать субтитры из формата «.srt» в формат «.vtt», в котором слияние или разбиение реплик оказывается гораздо менѣе трудоёмким за счёт того, что там их хотя бы не приходится заодно ещё и перенумеровывать.)
В этой команде параметр «language=ru» должен быть замѣнёнъ на другой (напримѣръ, «language=en» или «language=ja») при необходимости распознавания другого языка. Если предполагается распознавание многоязычной видеозаписи, то этот параметр можно не указывать, но нейросѣть начнёт работать медленнѣе и допускать ошибки в распознавании языков. (Вы удивитесь, когда увидите, сколь многие краткие возгласы на других языках — или возгласы невербальные — и даже нѣкоторые фрагменты пѣнія птицъ — могут казаться нейросѣти словами изъ корейскаго или китайскаго языка.)
В этой команде параметр «use_gpu=0» можно не указывать (и даже нужно не указывать), если даже въ нынѣшней непростой экономической ситуации вы приняли (и исполнили) рѣшеніе обзавестись видеокартою болѣе производительною, чѣмъ центральный процессор.
В этой команде строка «/путь/к/» должна быть (въ двухъ мѣстахъ) замѣнённою на настоящий путь к тому каталогу, в который вы полóжите скачанные вѣсá натренированных нейросѣтей, одна из которых («ggml-large-v3.bin») занимается распознаванием рѣчи, а другая («ggml-silero-v6.2.0.bin») распознаванием пауз между репликами. Для скорости я предположил их лежащими на диске C (он обычно SSD).
Файл «ggml-large-v3.bin» занимает чуть больше трёх миллиардов байтов, а найти его можно в подкаталоге https://huggingface.co/ggerganov/whisper.cpp/tree/main на сайте Hugging Face. Теоретически можно предполагать, что со временем там появится и какой-нибудь файл v4 (для настройки нейросѣти, натренированной ещё лучше, нежели v3), но на практике с конца 2023 года этого не случалося ни разу.
Файл «ggml-silero-v6.2.0.bin» занимает меньше мегабайта, а найти его можно в подкаталоге https://huggingface.co/ggml-org/whisper-vad/tree/main на сайте Hugging Face.
При всей своей ≈трёхгигабайтной натренированности нейросѣть способна допускать ошибки в распознавании рѣчи, причём не только из числа извѣстныхъ ещё в восьмидесятые годы (напримѣръ, «это же ребёнок» вмѣсто «это жеребёнок» и наоборот) или сдѣлавшихся извѣстными благодаря misheard lyrics въ эстрадныхъ пѣсняхъ (напримѣръ, «скрип колеса» вмѣсто «скрипка-лиса» и наоборот), но и в болѣе простых случаях — напримѣръ, при простой невнятице в окончаниях слов (нейросѣть не училася в средней школе правилам согласования слов по склонению или по спряжению).
Способна она и галлюцинировать, то есть «на ровном мѣстѣ» вписывать в субтитры такие слова, которыя вообще никто не произносил в конкретной видеозаписи, но которыя зато очень часто попадалися в подобных мѣстахъ в том исходном материале, на котором нейросѣть натренировывали:
➊ В начале субтитров иногда появляются заблаговременныя извиненія за будущія допущенныя ошибки в субтитрах.
➋ В конце субтитров иногда появляются призывы «подписываться на канал».
➌ И в начале, и в конце иногда «воскресают» упоминания составителей исходных субтитров. (На русском языке чаще других упоминается нѣкій DimaTorzok.)
Примѣрно вот как выглядит она:
ffmpeg -hide_banner -i имя_видеофайла -vn -sn -af "whisper=language=ru:destination=whispered.srt:format=srt:queue=30:use_gpu=0:vad_model=C\\:/путь/к/ggml-silero-v6.2.0.bin:model=C\\:/путь/к/ggml-large-v3.bin" -f null -
В этой команде параметр «имя_видеофайла» должен быть замѣнёнъ именем конкретного видеофайла (ну или аудиофайла), распознавание рѣчи из которого происходит.
В этой команде содержимое параметров «format=srt» и «whispered.srt» означает, что субтитры будут записаны в файл «whispered.srt». Никто ещё не научил Whisper (и FFmpeg) сразу создавать субтитры в каком-нибудь другом формате — ни в «.ass», ни в «.vtt». (А вот если не «сразу», а «потóм», то тогда в том же FFmpeg, уж конечно, нетрудно перегнать субтитры из формата «.srt» в формат «.vtt», в котором слияние или разбиение реплик оказывается гораздо менѣе трудоёмким за счёт того, что там их хотя бы не приходится заодно ещё и перенумеровывать.)
В этой команде параметр «language=ru» должен быть замѣнёнъ на другой (напримѣръ, «language=en» или «language=ja») при необходимости распознавания другого языка. Если предполагается распознавание многоязычной видеозаписи, то этот параметр можно не указывать, но нейросѣть начнёт работать медленнѣе и допускать ошибки в распознавании языков. (Вы удивитесь, когда увидите, сколь многие краткие возгласы на других языках — или возгласы невербальные — и даже нѣкоторые фрагменты пѣнія птицъ — могут казаться нейросѣти словами изъ корейскаго или китайскаго языка.)
В этой команде параметр «use_gpu=0» можно не указывать (и даже нужно не указывать), если даже въ нынѣшней непростой экономической ситуации вы приняли (и исполнили) рѣшеніе обзавестись видеокартою болѣе производительною, чѣмъ центральный процессор.
В этой команде строка «/путь/к/» должна быть (въ двухъ мѣстахъ) замѣнённою на настоящий путь к тому каталогу, в который вы полóжите скачанные вѣсá натренированных нейросѣтей, одна из которых («ggml-large-v3.bin») занимается распознаванием рѣчи, а другая («ggml-silero-v6.2.0.bin») распознаванием пауз между репликами. Для скорости я предположил их лежащими на диске C (он обычно SSD).
Файл «ggml-large-v3.bin» занимает чуть больше трёх миллиардов байтов, а найти его можно в подкаталоге https://huggingface.co/ggerganov/whisper.cpp/tree/main на сайте Hugging Face. Теоретически можно предполагать, что со временем там появится и какой-нибудь файл v4 (для настройки нейросѣти, натренированной ещё лучше, нежели v3), но на практике с конца 2023 года этого не случалося ни разу.
Файл «ggml-silero-v6.2.0.bin» занимает меньше мегабайта, а найти его можно в подкаталоге https://huggingface.co/ggml-org/whisper-vad/tree/main на сайте Hugging Face.
При всей своей ≈трёхгигабайтной натренированности нейросѣть способна допускать ошибки в распознавании рѣчи, причём не только из числа извѣстныхъ ещё в восьмидесятые годы (напримѣръ, «это же ребёнок» вмѣсто «это жеребёнок» и наоборот) или сдѣлавшихся извѣстными благодаря misheard lyrics въ эстрадныхъ пѣсняхъ (напримѣръ, «скрип колеса» вмѣсто «скрипка-лиса» и наоборот), но и в болѣе простых случаях — напримѣръ, при простой невнятице в окончаниях слов (нейросѣть не училася в средней школе правилам согласования слов по склонению или по спряжению).
Способна она и галлюцинировать, то есть «на ровном мѣстѣ» вписывать в субтитры такие слова, которыя вообще никто не произносил в конкретной видеозаписи, но которыя зато очень часто попадалися в подобных мѣстахъ в том исходном материале, на котором нейросѣть натренировывали:
➊ В начале субтитров иногда появляются заблаговременныя извиненія за будущія допущенныя ошибки в субтитрах.
➋ В конце субтитров иногда появляются призывы «подписываться на канал».
➌ И в начале, и в конце иногда «воскресают» упоминания составителей исходных субтитров. (На русском языке чаще других упоминается нѣкій DimaTorzok.)