假设我们一段 30fps 的影片,这是最开始的 4 帧
我们可以在帧内看到很多重复内容,如蓝色背景,从 0 帧到第 3 帧它都没有变化。为了解决这个问题,我们可以将它们抽象地分类为三种类型的帧。
I 帧(帧内编码,关键帧)
I 帧(可参考,关键帧,帧内编码)是一个自足的帧。它不依靠任何东西来渲染,I 帧与静态图片相似。第一帧通常是 I 帧,但我们将看到 I 帧被定期插入其它类型的帧之间。
IDR帧
IDR帧(Instantaneous Decoding Refresh picture, 即时解码刷新帧)是一种特殊的I帧。
当解码器解码到IDR帧时,会将DPB(Decoded Picture Buffer,指前后向参考帧列表)清空,将已解码的数据全部输出或抛弃,然后开始一次全新的解码序列。
IDR帧之后的图像不会参考IDR帧之前的图像,因此IDR帧可以阻止视频流中的错误传播,同时IDR帧也是解码器、播放器的一个安全访问点。
P 帧(预测)
P 帧利用了一个事实:当前的画面几乎总能使用之前的一帧进行渲染。例如,在第二帧,唯一的改变是球向前移动了。仅仅使用(第二帧)对前一帧的引用和差值,我们就能重建前一帧。
实际情况中,一般使用一个I帧多个P帧。但是P帧不能太多,因为离上一个I帧越远,预测难度就越大,丢失的信息也就越多。
B 帧(双向预测)
如何引用前面和后面的帧去做更好的压缩?!简单地说 B 帧就是这么做的。
看前面一帧和后面一帧哪个更像就通过哪个去预测
B帧远比P帧复杂,预测复杂,解码也更为复杂,有可能B帧参考的是下一个相邻P帧。
B帧的效率更高,比如30fps,总有前一张或者后一张是像的。
B帧在运动相机中用的更多,运动中前后变化就很大,所以需要双向预测。
普通的相机P帧用的比较多
总结
这些帧类型用于提供更好的压缩率,我们将在下一章看到这是如何发生的。现在,我们可以想到 I 帧是昂贵的,P 帧是便宜的,最便宜的是 B 帧。
补充
- I帧越大,P帧越小;I帧越小P帧越大
- I帧大小取决于图像本身内容,和压缩算法的空间部分
- P帧的大小取决于图像变化的剧烈程度
P帧是预测来的,如果变化大,那么变化大,P帧就大 - CBR和VBR下P帧的大小策略会不同,CBR时P帧大小基本恒定
最后一点可以了解到音视频中的码率控制再进行了解