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