FFmpeg (HLS) - Разделить сегменты по размеру, а не по времени (или ограничить размер сегмента)

Поэтому у меня есть команда ffmpeg со следующими параметрами (в NodeJS, но это не имеет значения):

'-start_number 0',
'-hls_key_info_file ' + HLSKEY_PATH,
'-hls_time 5',
'-hls_playlist_type vod',
'-hls_segment_filename seg-%d.ts'

Все работает нормально, но есть проблема с размером каждого сегмента. Почему ffmpeg не может создавать сегменты по размеру, а не по времени? В этом случае -hls_time 5, Я надеялся сделать что-то вроде -hls_size 4096 но нет варианта для этого, по крайней мере из того, что я знаю. Или я могу хотя бы установить лимит? Например: "Не создавайте сегменты размером более 4 МБ, при необходимости делите их снова".

Я знаю, что мог бы снова закодировать файл, и тогда не было бы сегментов, которые бы различались по размеру, но это не вариант и не альтернатива для меня.

Заранее спасибо!

1 ответ

Не ВСЕ кадры содержат одинаковое количество информации. Сжатие видео работает таким образом, что некоторые кадры имеют МЕНЬШУЮ информацию, а другие - БОЛЬШЕ. Технически, тогда, если длительность сегмента в миллисекундах ВСЕГДА одинакова, размеры фрагмента не будут одинаковыми.

Я думаю, что нет варианта для того, что вы спрашиваете.

Есть команда "-fs" (размер выходного файла), но я думаю, что она работает для ограничения размера всего вывода, а не только сегментов.

На вашем месте, если размеры сегмента меня беспокоят, я бы просто уменьшил продолжительность на одну секунду, затем на два, и посмотрю. Удачи.

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