Я использую ffmpeg для создания системы транскодирования видео по требованию, которая обслуживает мультимедиа в формате HLS.

Прямо сейчас я могу перекодировать видео и обслуживать его по мере их кодирования, но я не могу использовать функцию поиска моих проигрывателей, потому что список воспроизведения (.m3u8) генерируется только по мере кодирования фрагментов. Я попытался использовать параметры -g , установив его на 90 с длиной чанка 3 с и 30 к / с (29,7 к / с, если быть точным). Но фактическая длина куска слегка колеблется. Я также попытался установить флаг HLS round_durations , но проигрыватель не работает с ним.

Зависит ли размер фрагментов от сцен, которые он транскодирует, или же можно, исследуя файл, быстро определить его шаблон и сгенерировать виртуальный файл .m3u8 в начале? Или есть ли возможность заставить ffmpeg генерировать плейлист без фактического кодирования файлов?

Это команда, которую я сейчас использую: (несколько строк для ясности)

ffmpeg.exe -i input.mkv -c:v libx264 -c:a aac -crf 22 -preset faster
-format hls -sn -hls_time 3 -hls_base_url http://localhost/media/
-hls_list_size 0 -hls_flags split_by_time -hls_playlist_type event -g 90 -r 30 index.m3u8

1 ответ1

2

Если вы каким-либо образом не принудительно вводите каденцию ключевого кадра, размещение выходного ключевого кадра невозможно угадать, не пропустив кадры через кодировщик.

Вы можете форсировать более точное размещение ключевого кадра, опустив -g и добавив -force_key_frames expr:gte(t,n_forced*3)

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