当处理原始视频时,H.264编解码器如何构建P帧?

4

我正在尝试了解视频编解码器的工作原理,其中之一是 H.264

我已经阅读了一些关于 H.264 工作原理的文章,并希望对此有所了解。

在阅读相关内容时,我了解到在使用 H.264 对视频进行编码时会使用不同类型的帧,例如 I-FrameP-FrameB-Frame

但是,我无法理解的是,在给定一个原始视频(显然存在以帧为单位的数据),网上的文献说 I-Frame 是原始帧,而 P-Frame 是从前一个 I-FrameP-Frame 预测出来的。但是如果不存在另一个 P-Frame,那么如何预测 P-Frame 呢?

同时,我也对 P-Frame 的预测感到困惑。

请帮助我理解这个问题,或者推荐一些能够解释此问题的文献。


据我所知,每当开始视频编码时,编码后的第一帧视频始终是“I-Frame”。 - Krishna Oza
1
“P-frame” 意味着只有一些像素仍然存在(通常是移动/更改的像素),其余的图像是基于先前帧已知的内容进行预测(或复制)的。请参见此 图像 的顶部部分。请记住,视频帧向前移动,因此您始终可以检查先前帧的图像(当所有部分被解码并拼接在一起时,它本身看起来像一个关键帧)。 - VC.One
1
@VC.One,你应该把你的评论转化为一个答案。这其实是一个术语问题,因为没有什么是“被预测”的,就像“被神谕预言”一样。相反,后续的P帧是通过运动矢量和变换系数,利用由I帧和P帧表示的可用信息构建的。有了B帧就更复杂了。 - smirnoff
1
@Krishna_Oza 你也应该查看这篇**文章**,或许这份 H.264解码器手册的PDF 可以帮助你理解帧类型之间的关系... - VC.One
1
@KrishnaOza:h.264被用于视频后处理等领域。如果您已经拥有整个剪辑,那么您就可以“展望未来”。当在流媒体/直播中传输该剪辑时,这当然意味着您需要有一个偏移量。但是偏移量只有一个帧而已。 - larry
显示剩余2条评论
1个回答

9
考虑到您最近的B-frames评论。视频编码器有一个缓冲区,保留一定数量的帧。
我们考虑一个例子:您的前4个帧将按以下结构进行编码:IBBP。
第一帧被编码为I帧(内部)。帧2和3是B帧,不能立即编码,因为它们正在等待“未来”的P帧。因此,它们被放入缓冲区。当第4帧到达编码器时,它是双向编码的(单向),第一帧(I帧)作为参考。现在已经编码了P帧,需要引用过去和未来的帧2和3可以进行编码(双向,双向)。
因此,编码顺序为:IPBB。这不是与显示顺序相同的顺序。
正如您所看到的,B-frames会导致编码过程中的延迟,并且通常不用于低延迟应用程序,例如视频会议。

3
提到“解码顺序”和“显示顺序”的差异值得点赞。这就是为什么MPEG解码器处理显示时需要使用“PTS”(显示时间戳),而还有一个“DTS”(解码器时间戳)指示帧应该在何时被解码并存储在缓冲区或显示。因此,“P帧”的“DTS”将比“B帧”更早,但对于最终的视频观看者来说,在“B帧”所在的帧/时间槽中的图像会先显示(在时间单位2和时间单位3),而“P帧”将在之后的时间单位4显示。这样可以进行未来预测(或分析)以显示出更早的图像。 - VC.One

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