Я только что начал использовать кодер 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. Я искал это онлайн, но не мог получить точно, что я искал, поскольку я плохо знаком с этим.
Как всегда с 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 являются популярными кодеками для этого типа потоковой передачи. Много комнаты для экспериментирования с опциями сегмента, которые описаны здесь...
Примечания: