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" (размер выходного файла), но я думаю, что она работает для ограничения размера всего вывода, а не только сегментов.
На вашем месте, если размеры сегмента меня беспокоят, я бы просто уменьшил продолжительность на одну секунду, затем на два, и посмотрю. Удачи.