Команда FFmpeg для кодирования mpeg-ts

Я только что начал использовать кодер FFmpeg. У меня есть команда для кодирования видеофайлов к mp4 контейнерам:

ffmpeg -i input.mp4 \
       -vcodec libx264 -s 426x240 -pix_fmt yuv420p \
       -crf 22 -minrate 200k -bufsize 400k -maxrate 400k -preset medium \
       -b:v 500000 -profile:v baseline -level 3.1 \
       -c:a aac -strict -2 -b:a 64k -ac 2 \
       output_240.mp4

Мне нужна соответствующая команда для кодирования mpeg-ts. Я искал это онлайн, но не мог получить точно, что я искал, поскольку я плохо знаком с этим.

2
задан 24 January 2018 в 10:39

1 ответ

Как всегда с FFmpeg существует много вариантов сделать, и я сузил это немного далее для создания четкого ответа:

1. Ваши входные кодеки файла поддерживаются в контейнере TS:

Исследуйте свой входной файл с FFmpeg следующим образом:

ffmpeg -i input.mp4

Если файл содержит кодеки, которые хорошо поддерживаются в контейнере TS, например, видео H.264 и звук AAC, можно просто скопировать потоки через:

ffmpeg -i input.mp4 -c copy output.ts

Это даст большие результаты, хотя Вы, возможно, должны варьироваться эта командная строка в зависимости от своего фактического использования выходного файла (потоковая передача, определенное устройство воспроизведения и т.д.).

2. Ваши входные кодеки файла не поддерживаются в контейнере TS:

Если Ваш входной файл будет содержать кодеки, которые не хорошо поддерживаются в контейнере TS, то необходимо будет повторно закодировать или видеопотоки или аудиопотоки или обоих. Кодеки по умолчанию для FFmpeg и контейнера TS являются звуком mp2 и mpeg2video. Если Вы будете рады пойти с этими кодеками по умолчанию, то следующее даст большие результаты:

ffmpeg -i input.mp4 \
       -c:v mpeg2video -qscale:v 2 \
       -c:a mp2 -b:a 192k \
       output.ts

Это, конечно, дало довольно разумные результаты в моей системе и если на Вашей также...

3. Вы хотите сегментировать свой файл для HTTP живой потоковой передачи (HLS):

И наконец можно хотеть произвести сегментированный файл TS с плей-листом для использования с HTTP живой потоковой передачей (HLS). Существуют как всегда несколько способов выполнить это, но демонстрационная командная строка ниже будет работать хорошо на входные файлы, кодеки которых поддерживаются в контейнере TS:

ffmpeg -re -i input.mp4 \
       -codec copy -map 0 \
       -f segment -segment_list playlist.m3u8 \
       -segment_list_flags +live -segment_time 10 \
       out%03d.ts

Если Вы хотите измениться, кодеки входного файла просто добавляют необходимые настройки вместо -codec copy, Я полагаю, что H.264 и AAC являются популярными кодеками для этого типа потоковой передачи. Много комнаты для экспериментирования с опциями сегмента, которые описаны здесь...

Примечания:

5
ответ дан 2 December 2019 в 01:54

Другие вопросы по тегам:

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