4

У меня есть файл MKV и я хочу преобразовать его в DVD-совместимый MPG-файл с помощью avconv . Как я также могу записать один поток субтитров из того же файла MKV?

avconv -i input.mkv -map 0:0 -map 0:1 -target pal-dvd -aspect 16:9 -q:v 1 -acodec mp2 -ac 2 -ab 128k output.mpg

1 ответ1

5

Текстовые субтитры

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 чтобы установить размер.

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