Текстовые субтитры
ffmpeg имеет фильтр subtitles
который может записывать файлы SRT в видеопоток. Вам нужно скомпилировать ffmpeg с --enable-libass
. Я не думаю, что у Libav есть что-то подобное, по крайней мере, просматривая доступные фильтры .
Сначала нужно извлечь субтитры. -map 0:s:0
выбирает первый поток субтитров для вывода, а -c:s:0
выбирает кодек для него - просто чтобы убедиться, что это действительно SRT.
ffmpeg -i input.mkv -an -vn -map 0:s:0 -c:s:0 srt subtitles.srt
Затем сожги их.
ffmpeg -i input.mkv -map 0:0 -map 0:1 -target pal-dvd -aspect 16:9 -q:v 1 \
-c:a mp2 -ac 2 -b:a 128k -filter:v subtitles=subtitles.srt output.mpg
Замечания:
Приведенная выше команда предполагает, что потоки 0:0
и 0:1
на вашем входе являются потоками видео и аудио соответственно. Если вы хотите только запретить включение субтитров в выходной файл, вы также можете добавить -sn
чтобы полностью отключить их.
Вы должны изменить -ab
на -b:a
, поскольку первый вариант не существует для ffmpeg.
Субтитры на основе изображений
В случае, если ваши входные данные имеют субтитры на основе изображений, такие как HDMV PG (кажется, что MakeMKV создает их, а другие инструменты не могут их извлечь), вы можете попробовать использовать оверлейный фильтр для их записи:
ffmpeg -i input.mkv -filter_complex "[0:v][0:s]overlay[v]" -map [v] -map 0:a \
-target pal-dvd -aspect 16:9 -q:v 1 -c:a mp2 -ac 2 -b:a 128k output.mpg
Это также объясняется в FFmpeg Wiki.
Если ваши субтитры имеют размеры, отличные от исходного фильма (например, из-за того, что поток видео был уменьшен, а субтитры не были), вы можете попробовать использовать параметр -canvas_size
чтобы установить размер.