出于好奇最近在看x264的源代码。
对于不管是263、264还265编码来说,图像的压缩大题思路实际上是没有太大变化的。
对图像的压缩和编码,分为相关和非相关部分。又由于263、264、265并没有定义一定是无损压缩,所以在压缩和编码上与音频的编码和压缩也有着相似的处理方式;即,按照人的视觉特性进行编码(人眼分辨画面细节的能力是有限的)。
相关性压缩(和编码)又分为帧内相关和帧间相关,即编码出来的I帧就是我们所说帧内相关,B、P帧则是帧间相关。
对于非相关编码部分,大部分都集中在图像的前期处理上,例如归一化、白平衡、色度调节等。步骤大致如下:
- 在图像预处理完成后(归一化、降噪等),接下来就是x264较多需要做的事情图像编码与压缩(虽然x264自身也会做一些降噪、再降噪、色度调节等)。
- 先说编码部分,x264里面先将一副raw数据(可能是yuv420,可能是yv12等等),进行切块(即宏块分割,图像简单预测)。
- 将分割好的图像在做块内再分割(细节预测,找出图像细节部分,对细节部分在切割,变成小块)
- 接着又对每一个块做相邻之间的差异化计算(其实就是求出差异),这个过程是最复杂的一个。
下面是对于不同类型帧切块分类的说明其他具体的解释会在后续说:
其中对于不同类型的输出帧,宏块的大小如下:
I帧:
16*16、8*8、4*4
P帧:
L0、8*8、SKIP
B帧:
DIRECT、L0L0、L0L1、L0BI、L1L0、L1L1、L1BI、BIL0、BIL1、BIBI、8*8、SKIP