Преобразование TS ATSC в MKV, включая все аудиодорожки и субтитры из FFMPEG

341
PCSO SAR COMM

Я предполагаю, что это можно как-то сделать, потому что я видел программы, которые являются интерфейсом GUI для FFMPEG, которые по сути делают это, но я пытаюсь выяснить это из командной строки в Ubuntu. Я хочу транскодировать из видеопотока MPEG2 из записи ATSC в h264, но просто сохранить все аудиоканалы как есть. Я также хотел бы преобразовать субтитры в дорожку субтитров в финальной оболочке MKV. Кроме того, можно отметить, по крайней мере, основную звуковую дорожку и дорожку субтитров как « En сский»? Чтобы сделать его еще более удивительным, создание этого сценария BASH, в котором я могу назвать входной файл и сохранить его под тем же именем, но изменить его на .mkv, сделало бы его идеальным. Я не обладаю достаточными знаниями для написания сценария с нуля, и при этом я не знаю правильных переменных для команды FFMPEG.

0

1 ответ на вопрос

0
Scott Reynolds

Это немного сложно, но вот рабочий метод:

INFILE=input.ts OUTFILE=output.mkv ffmpeg \ -i "$" \ -f lavfi -i movie="$[out+subcc]" \ -map 0 -map 1:s \ -codec:v libx264 \ -codec:a copy \ -codec:s srt \ -metadata:s:s:0 language=eng \ "$" 

Здесь input.tsи output.mkvнаходятся желаемые входные MPEG-TS и выходные Matroska файлы соответственно. Обобщение к сценарию оставлено читателю в качестве упражнения.

Интерпретация параметров, строка за строкой:

-i ... это входной файл.

-f lavfi -i ... позволяет извлечь извлеченный поток титров.

-map 0 -map 1:s выбирает потоки для вывода.

-codec:v libx264 говорит ffmpeg конвертировать видео в H.264.

-codec:a copy копирует все аудиопотоки на выход без изменений.

-codec:s srt говорит ffmpeg преобразовать встроенные подписи в SRT.

-metadata:s:s:0 language=eng устанавливает язык потоков субтитров на английский.

Заметки:

  • Я использовал это только с эфирными потоками ATSC, включая, как я полагаю, заголовки EIA-608. Я понятия не имею, работает ли он с записями QAM (кабель), хотя я ожидаю, что это так.
  • У вас могут возникнуть проблемы с именами входных файлов, содержащих определенные символы, даже если вы поместите имя файла в кавычки.
  • Это скопирует все аудио потоки. Если вы хотите только первый, вам нужно явно отобразить отдельные потоки из ввода 0.
  • Скорее всего, у аудиопотоков уже установлен язык. Если это не так, добавьте еще один параметр -metadata, чтобы установить язык аудиопотока.
  • Скорее всего, вы захотите поэкспериментировать с качеством кодирования видео, используя опцию -crf. Если ваше входное видео чересстрочное, вы также можете деинтерлейсировать и масштабировать до 720p, добавляя -filter:v bwdif=0,scale=1280:720после -mapстроки (ей).

Похожие вопросы