强制关键帧是什么意思?

4

强制关键帧是什么意思?

根据文档

-force_key_frames[:stream_specifier] expr:expr (输出,每个流) 在指定的时间戳处强制关键帧,更确切地说,在每个指定时间之后的第一帧。如果参数以expr:为前缀,则像表达式一样解释字符串expr,并对每个帧进行评估。在评估结果为非零时,将强制使用关键帧。

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

1个回答

5
一种典型的视频编解码器使用时间压缩,即大多数帧仅存储与早期(在某些情况下为未来)帧的差异。因此,为了解码这些帧,必须引用早期帧以生成完整图像。简而言之,关键帧是不依赖其他帧进行解码,并且其他帧依赖于它们进行解码的帧。
如果必须对视频进行裁剪或分段,而无需重新编码,则分段只能发生在关键帧处,以使段的第一帧成为关键帧。如果不是这种情况,则段的帧直到下一个关键帧将无法播放。
像x264这样的编码器通常仅在检测到场景更改时生成关键帧*。这对于分段并不利,因为关键帧可能会以不规则的间隔生成。为了确保可以制作具有相同和可预测长度的片段,可以使用force_key_frames选项来确保所需的关键帧位置。 -force_key_frames expr:gte(t,n_forced*5) 在t = 5,10,15秒处强制生成关键帧...
GOP大小选项g是另一种确保关键帧位置的方法,例如 -g 50 每50帧强制生成一个关键帧。
*受最小和最大关键帧距离参数的影响。

如果我使用FFmpeg命令对视频进行分段,那么-force_key_frames expr:gte(t,n_forced*5)-g 5中的数值应该相同吗? - Android Developer
不要同时使用两个选项。但是,g的测量单位是帧。力表达式中的值以秒为单位测量。 - Gyan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接