FFMPEG HLS - создание только списка воспроизведения или прогнозирование времени сегмента перед кодированием

1323
Pedro M. Silva

Я использую 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 
0

1 ответ на вопрос

2
Gyan

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

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

Это похоже на работу, спасибо! Хотя есть небольшая странность, которую я не знаю, можно исправить. Продолжительность каждого куска по-прежнему 3.003200, а не просто 3. Как я могу найти причину этого, и будет ли она одинаковой для каждого видео? Pedro M. Silva 6 лет назад 0
Не очень знаком с внутренними компонентами мультиплексора HLS, но это, вероятно, из-за аудио. Длительность аудиокадра не совпадает с длительностью видео, видео управляет, когда сегмент прекращает добавление кадров, но длительность последнего аудиокадра пересекает предел <- мое предположение. Gyan 6 лет назад 0
Могу ли я узнать, какова длительность каждого аудиокадра, проверяя исходный файл, чтобы я мог предсказать, насколько последний кадр будет переполнен? В любом случае, спасибо, ваша помощь спасла мне много работы. ;) Pedro M. Silva 6 лет назад 0
Продолжительность аудио кадра = `1024 / частота дискретизации звука` сек Gyan 6 лет назад 0

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