Я делаю сегментатор, который вмешивается в функцию write_frame ffmpeg и записывает выходные данные в отдельные файлы. Каждый сегментированный файл содержит сегмент видео продолжительностью около 3 секунд.
Код делает следующее:
1 - Get transcoded packet
2 - Check if it contains key frame data, if yes goto 3.
3 - Check the duration of current segment, if it exceed 3 seconds, goto 4
4 - Close file, and create new segment, write packet to segment file, goto-1
Вообще говоря, каждый сегмент содержит как минимум 3-секундные видеоданные и начинается с ключевого кадра.
Проблема в том, что продолжительность выходного видео очень разная, некоторые содержат 3 секунды, некоторые содержат 5 или 6.
Я подозреваю, что проблема связана с тем, как ffmpeg генерирует ключевые кадры во время транскодирования. Если «расстояние» между двумя соседними ключевыми кадрами равно 6 с, я получил 6-секундный сегмент.
Вот мои вопросы:
правда ли, что ffmpeg генерирует ключевые кадры с нерегулярными интервалами (и интервал времени может составлять до нескольких секунд (например, 6)?
Как мы можем контролировать генерацию ключевого кадра ffmpeg? (я думаю, для этого должен быть аргумент команды ffmpeg, возможно, -force_key_frames, но я не уверен)