5

У меня проблемы с добавлением субтитров к видеофайлу с помощью ffmpeg.

Я использую эту команду:

ffmpeg -i movie_input.m4v -newsubtitle subtitles.srt -acodec copy -vcodec copy movie_output.m4v

Я нашел этот пример командной строки в различных уроках, но по какой-то причине (более новая версия ffmpeg?) это дает мне:

Unrecognized option 'newsubtitle'

Любая подсказка относительно того, как я могу добавить субтитры, используя ffmpeg?

Спасибо!

PS Мне нужно решение, которое можно автоматизировать с помощью bash-скрипта, поэтому использование таких программ, как Subler, не подходит для этой задачи.

2 ответа2

9

-newsubtitle - устаревшая опция из старых версий ffmpeg; в более современных версиях команда будет выглядеть так:

ffmpeg -i input.m4v -i subtitle.srt -map 0 -map 1 -c copy -c:s mov_text output.m4v

-i input.m4v -i subtitle.srt указывает ffmpeg использовать эти два файла в качестве входных данных.

-map 0 -map 1 указывает ffmpeg использовать все потоки из входного номера 0 и входного номера 1.

Это не имеет прямого отношения к этому, но вы можете выбрать отдельные потоки с помощью -map: -map 0:v выберет все видеопотоки из ввода 0, -map 1:s выберет все потоки субтитров из ввода 1, -map 0:0 выберет поток 0 (первый поток) из входа 0, -map 1:a:0 выберет первый аудиопоток входа 1.

-c copy указывает ffmpeg копировать все потоки из входных данных без перекодирования, при этом -c:s mov_text после -c copy переопределяет параметр копирования для потока субтитров, перекодируя его в форму, которую может содержать контейнер MP4 ,

6

С FFmpeg 0.9 опция -newsubtitle была удалена. Если вы хотите добавить потоки видео / аудио / субтитров всех входных файлов к выходу, используйте параметры -map , например:

ffmpeg -i movie_input.m4v -i subtitles.srt -c:v copy -c:a copy -c:s mov_text \
-map 0 -map 1 out.m4v

Это скопирует видео и аудио потоки, но закодирует субтитры в mov_text , который является единственным официально поддерживаемым форматом субтитров для MP4. SRT по умолчанию не будет работать.

Здесь параметры map указывают, что все потоки из первого файла (0) и второго файла (1) будут скопированы, поэтому он будет работать, даже если ваш оригинал имел, например, несколько аудиопотоков.

Подробную статью о том, как использовать опцию map , смотрите в вики FFmpeg.

Причина удаления этих опций из журнала изменений:

Параметры -newvideo/-newaudio/-newsubtitle были удалены. Они были не только нерегулярными и очень запутанными, но и избыточными. В avconv опция -map создаст новые потоки в выходном файле и отобразит входные потоки к ним. Например, avconv -i INPUT -map 0 OUTPUT создаст выходной поток для каждого потока в первом входном файле.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .