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

1 ответ1

0

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

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

Здесь 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 .

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