强制关键帧意味着什么?

时间:2017-04-22 18:44:40

标签: android ffmpeg android-ffmpeg

强制关键帧是什么意思?

根据doc

  

-force_key_frames [:stream_specifier] expr:expr(输出,每个流)在指定的时间戳强制关键帧,更准确地说是在   每个指定时间后的第一帧。如果参数是前缀的   使用expr:,字符串expr被解释为表达式而且是   评估每个框架。在评估的情况下强制关键帧   是非零。

仍然我无法理解在指定的时间戳意味着强制关键帧的含义及其用途是什么?我可以看到在分割视频时使用此命令。它的用途是什么?

1 个答案:

答案 0 :(得分:2)

典型的视频编解码器使用时间压缩,即大多数帧仅存储相对于较早(以及在某些情况下,未来)帧的差异。因此,为了解码这些帧,必须参考较早的帧,以便生成完整的图像。简而言之,关键帧是不依赖于其他帧进行解码的帧,其他帧依赖于这些帧以进行解码。

如果必须剪切或分割视频,而不进行转码(重新压缩),则分段只能在关键帧处发生,因此片段的第一帧是关键帧。如果不是这种情况,则无法播放段到下一个关键帧的帧。

像x264这样的编码器通常只有在检测到场景发生了变化时才生成关键帧*。这不利于分割,因为关键帧可能以不规则的间隔生成。为了确保可以生成相同且可预测长度的段,force_key_frames选项可用于确保所需的关键帧放置。

-force_key_frames expr:gte(t,n_forced*5)强制关键帧在t = 5,10,15秒......

GOP尺寸选项g是确保关键帧放置的另一种方法,例如-g 50每50帧强制一个关键帧。

*受最小和最大关键帧距离参数的限制。