H.264编解码介绍
为什么要编码?
视频本质上就是一张张连续的图片快速播放。假设我们现在有24张联系的图片,将他们在1秒内快速切换,那么就形成了一个1秒的视频。
人眼睛的敏感度有限。一般来说,24到30 FPS之间的帧率已经足够让人感觉到动作的流畅性。但是就算如此,如果播放一个1分钟的1080P视频:

这实在太大了,所以我们需要使用编码的方式去压缩数据。
编码的目的:
编码的目的,就是为了压缩。各种视频编码方式,都是为了让视频变得体积更小,有利于存储和传输。编码的 核心思想就是去除冗余信息。
编码的思路:
空间冗余 == 相邻像素重复:
1 |
|
时间冗余 == 帧之间差值:
1 |
|
视觉冗余 == 人类不敏感的颜色
1 |
|
信息熵冗余 == 熵编码-哈夫曼算法
1 |
|
知识冗余 == 人类(头 身体 腿),汽车,房子 不需要记录
1 |
|
基于以上思路,我们将传输的数据分成三种类型的帧数据:I帧、P帧和B帧
帧内编码:I帧
I帧(Intra-coded Frame),即帧内编码,是一种独立的压缩方式。I帧完全自包含,它不依赖于其他帧的数据。每个I帧都包含完整的图像信息,类似于一张静态图片。这是视频流中的关键帧,其他帧(P帧和B帧)都需要依赖于I帧进行解码。
I帧的优点是解码时不需要参考其他帧,能够快速显示画面。它通常作为视频流的起始点或恢复点,保证视频流的稳定性。缺点是,I帧的文件体积较大,因为它包含了完整的图像数据,而没有任何冗余信息。这使得I帧的压缩效率较低,尤其是在视频变化较小的情况下。
帧间编码:P帧和B帧
与I帧不同,P帧(Predicted Frame)和B帧(Bidirectional Predicted Frame)是帧间编码的代表。它们通过参考之前(P帧)或前后两帧(B帧)来编码差异数据,从而实现高效的压缩。
P帧通过参考前一帧的数据来预测当前帧,因此可以仅编码与前一帧的差异。相比I帧,P帧的压缩效率更高,文件体积更小。
B帧通过参考前后两帧的数据进行编码,压缩效果比P帧更强。B帧能够更精确地表示视频帧之间的变化,因此其压缩效率是三者中最优的。
