我正在制作一个分段器来干预 ffmpeg 的 write_frame 函数并将输出数据写入单独的文件。每个分段文件包含大约 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 可能,但我不确定)