1

强制关键帧是什么意思?

根据文档

-force_key_frames[:stream_specifier] expr:expr (output,per-stream) 在指定的时间戳强制关键帧,更准确地说是在每个指定时间后的第一帧。如果参数以 expr: 为前缀,则字符串 expr 被解释为表达式,并针对每一帧进行评估。如果评估不为零,则强制使用关键帧。

我仍然无法理解在指定时间戳强制关键帧是什么意思以及它的用途是什么?我可以看到在分割视频时使用了这个命令。它的目的是什么?

4

1 回答 1

4

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

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

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

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

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

*以最小和最大关键帧距离参数为准。

于 2017-04-22T19:11:34.223 回答