Озвучка, заметки программиста


Если вам приходилось (в формате хобби) заниматься озвучкой видеороликов, то как программист, вы бы явно задумались об автоматизации этого процесса. Сделал небольшие заметки по автоматизации, которой пользуюсь сам и которая поможет оптимизировать время вам. Будут рекомендации - смело накидывайте в комментариях (или в телеграм-блоге).
По задачам:
- Как удобно скачать ролик из интернета с помощью консоли
- Как пожать видео, если оно "слишком" production
- Как отрезать нужный эпизод
- Как сгенерировать субтитры*
- Как добавить субтитры на видео*
- Как разделить в дорожке голос от фона
- tl;dr (резюме или requirements.txt для установки всех приложений в Python)
*пп. 4-5 - от лукавого, автоматическая генерация субтитров в CapCut работает очень даже хорошо (и быстро).
Скачать ролик из интернета с помощью консоли (если он доступен на Youtube, пример):
pip install yt-dlp
yt-dlp "https://www.youtube.com/watch?v=ACPcQyrl3Xo"
Пожать видео, если оно "слишком" production. Пример как мне удалось превратить видео размера 500MB (исходник в формате *.mov) в 35 MB (результат в формате *.mp4) без заметной потери качества для просмотра с планшета или телефона (приложение ffmpeg):
Обратите внимание на параметр "-crf 23", чем больше нужно пожать, тем больше должно быть значение (и наоборот)
ffmpeg -i input.mov -c:v libx264 -crf 23 -preset slow -c:a aac -b:a 192k output.mp4
Отрезать нужный эпизод (вырезаем участок с 22 секунды по 2 мин 06 секунд из видео input.mp4 и сохраняем результат в output.mp4 с помощью приложения ffmpeg):
ffmpeg -i input.mp4 -ss 00:00:22 -to 00:02:06 -c copy output.mp4
Сгенерировать субтитры:
установить пакет Python:
pip install openai-whisper
Пользуемся. Версия A (показать на экране):
whisper input.mp4 --language Russian
Версия B (сохранить в файл субтитров, чтобы можно было добавить к видео):
whisper input.mp4 --language Russian --output_format srt
Добавить сутритры на видео:
Просто докинуть дорожку субтитров к видео:
ffmpeg -i input.mp4 -i output.srt -c copy -c:s mov_text output.mp4
(Обычно более полезно для удобной озвучки) Добавить субтитры изображением поверх видео, чтобы их можно было видеть при просмотре видео в вашем любимом видеоредакторе (e.g. CapCut):
ffmpeg -i input.mp4 -vf "subtitles=output.srt:force_style='Fontsize=24,PrimaryColour=&HFFFFFF&'" -c:a copy output.mp4
Разделить в дорожке голос от фона: платные видеоредакторы (e.g. CapCut Pro) и Web-утилиты опустим, поговорим про то, что доступно из консоли программисту. Нашел интересный проект человека, который раньше работал в Meta, оттуда уволился и сделал этот open source проект своим (а что так можно было? ;)):
Устанавливаем Python пакет:
pip install demucs
Мне правда пришлось актуализировать некоторые пакеты до последних версий:
pip install --upgrade torch torchaudio soundfile
Выгружаем из видео видеодорожку отдельно в .wav файл:
ffmpeg -i input.mp4 -vn -acodec pcm_s16le -ar 44100 -ac 2 audio.wav
И обрабатываем дорожку на две (фон и голос):
demucs -d cpu --two-stems=vocals audio.wav
Мне модель по умолчанию (и последняя актуальная) по качеству не понравилась. Больше подошла предыдущая модель. Ее можно установить и использовать следующим образом:
pip install diffq
demucs -d cpu --two-stems=vocals -n mdx_extra_q audio.wav
PROFIT: закидываем два-три видео в видеоредактор: один с субтитрами (для удобно озвучки), второй без - для финального монтажа видеролика без лишнего текста, третий (по желанию) на английском языке, чтобы было удобно послушать эмоции и оригинальную речь актера. Закидываем туда дорожку с фоном и голосом. Фон оставляем как есть, а голос нарезаем на те куски, которые принадлежат нашему герою, чтобы вынести на отдельную дорожку и замьютить (и при желании послушать для сравнения). Пример в CapCut:

Bonus или обещанный tl;dr
- Установить: ffmpeg
- Установить следующие пакеты на Python (requirements.txt):
demucs
diffq
openai-whisper
yt-dlp
- Вероятно будет необходимо (доставить и) сделать upgrade следующий Python пакетов (в формате requirements.txt):
soundfile
torch
torchaudio
На память, удобный shortcut для разреза дорожки в CapCut: Command (⌘) + B
P.S. Данный manual в идеальном мире разработчика предполагает настройку Python окружения (чтобы не гадить в system-wide). Если вы не программист - можно не париться. Но если программист и не знаете, что это такое, то обязательно изучите. Написать мануал по этой части у меня пока не дошли руки, но вы можете легко почерпнуть эти знания из интернета или, если удобнее, на курсе:

Comments ()