编码的目的是为了压缩,各种视频编码算法都是为了让视频体积变得更小,减少对存储空间和传输带宽的占用。编码的核心是去除冗余信息,通过以下 几 种冗余来达到压缩视频的目的:
1.空间冗余 图像相邻像素之间有较强的相关性, 比如一帧图像划分成 多 个 16x16 的块之后,相邻的块很多时候都有比较明显的相似性。
2.时间冗余: 视频序列的相邻前后帧图像之间内容相似,比如帧率为 25fps 的视频中前后两帧图像相差只有 40ms ,前后两张图像的变化较小,相似性很高。
3.视觉冗余: 我们的眼睛对某些细节不敏感,对图像中高频信息的敏感度小于低频信息的。可以去除图像中的一些高频信息,人眼看起来跟不去除高频信息差别不大(有损压缩)。
4.编码冗余(信息熵冗余): 一幅图像中不同像素出现的概率是不同的。对出现次数比较多的像素,用少的位数来编码。对出现次数比较少的像素,用多的位数来编码,能够减少编码的大小。比如哈夫曼编码。
H264中的I帧、P帧和B帧
H26使⽤帧内压缩和帧间压缩的⽅式提⾼编码压缩率;H264采⽤了独特的I帧、P帧和B帧策略 来实现连续帧之间的压缩;
I帧(帧内编码帧 intra picture):I帧通常是每个GOP的第一个帧,经过适度地压缩,做为随机访问的参考点,⾃身可以通过视频解压算法解压成⼀张单独的完整的图⽚
P帧(前向预测编码帧 predictive-frame):通过充分将低于图像序列中前⾯已编码帧的时间冗余信息来 压缩传输数据量的编码图像,也叫预测帧。需要参考其前⾯的⼀个I frame 或者P frame来⽣成⼀张完整的图⽚。
B帧(双向预测帧 bi-directional interpolated predictio