目录
2.1、I帧(Intra-coded Frame,帧内编码帧)
2.3、B帧(Bidirectional Frame,双向预测帧)
一、背景
I帧(Intra frame)、P帧(Predictive frame)和B帧(Bidirectional frame)是视频编码中的三种不同类型的帧,它们有不同的特点和作用,分别在不同的场合下使用。
视频压缩中,每帧代表一幅静止的图像。而在实际压缩时,会采取各种算法减少数据的容量,其中IPB就是最常见的。
二、概念
简单地说,I帧是关键帧,属于帧内压缩。就是和AVI的压缩是一样的。P是向前搜索的意思。B是双向搜索。他们都是基于I帧来压缩数据。
2.1、I帧(Intra-coded Frame,帧内编码帧)
2.1.1、定义
独立的关键帧,不依赖其他帧即可解码。 I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)。
2.1.2、编码原理
- 仅对当前帧内的空间冗余进行压缩
- 采用离散余弦变换(DCT) 将像素块转换为频域系数
- 通过量化和熵编码(如CAVLC/CABAC)进一步压缩
2.1.3、特点
- 数据量最大(约占单帧体积的5-10倍)
- 解码不依赖前后帧
- 是视频的随机访问点(Seek操作的基础)
2.1.4、使用场合
- 视频的起始处:每个视频序列通常以I帧开头。
- 场景切换:在场景变化明显的地方插入I帧,有助于提高视频质量。
- 随机访问点:需要频繁的随机访问时,增加I帧的频率。
2.2、P帧(Predictive Frame,预测帧)
2.2.1、定义
基于前向参考帧(I帧或P帧)预测的帧。P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)。
2.2.2、编码原理
- 通过运动估计(Motion Estimation) 寻找与参考帧的相似块
- 计算运动矢量(MV) 描述块位移
- 对预测残差(当前块 - 参考块)进行DCT+熵编码
2.2.3、特点
- 数据量约为I帧的1/3~1/2
- 依赖前序参考帧(形成单向依赖链)
- 包含运动补偿信息
2.2.4、使用场合
- 连续场景:适用于场景变化不大的连续帧。
- 减少带宽:通过减少数据量来节省带宽和存储空间。
2.3、B帧(Bidirectional Frame,双向预测帧)
2.3.1、定义
同时参考前后帧的帧。B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别(具体比较复杂,有4种情况),换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累。
2.3.2、编码原理
- 双向运动预测:综合前向+后向参考帧信息