如何控制ffmpeg的关键帧生成?

如何控制ffmpeg的关键帧生成?,ffmpeg,libav,Ffmpeg,Libav,我正在制作一个分段器,它将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, an

我正在制作一个分段器,它将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命令的参数,-强制关键帧,但我不确定)

  • ffmpeg可以基于场景变化检测以不规则的间隔生成关键帧

  • 关键帧间隔可由GOP大小控制。可使用以下选项

  • -g(FFmpeg) 关键帧间隔,也称为GOP长度。这决定了I帧之间的最大距离。非常高的GOP长度将导致稍微更有效的压缩,但会使视频中的搜索更加困难

    -按键输入最小值(FFmpeg)
    最小GOP长度,I帧之间的最小距离。

    我必须在代码中设置“-keyint_min”值的地方。嗨,jAckOdE,你解决了这个问题吗?我现在面临着同样的问题。几年前,我记不起我到底做了什么。但我的想法是在一定的间隔内强制生成关键帧(请用谷歌搜索-force_key_frame)FFmpeg可能已经更改,从那以后您最好参考最新的文档。希望它能帮助确定我会检查,谢谢jAckOdE