H264压缩技术
-
帧内压缩技术,解决的是空域数据冗余问题
假设一张图片是天蓝色背景,整个天蓝色背景就可以用很小的数据量进行存储,背景前的人也会有对应的算法进行处理。
-
帧间压缩技术,解决的是时域数据冗余问题
所谓时域就是随之时间的推移,每个时间段都会有一帧数据,一帧一帧的数据间,可以做参考。
例如第一帧是I帧,虽然压缩比不是太高,但是第二帧可以根据第一帧做参考,可以获得更高的压缩比。也就是将同一GOP组中的相同数据存储在参考帧内,后面的帧可以用更少的数据记录。 -
整数离散余弦变换(DCT),将空间的相关性变为频域上无关的数据,然后进行量化
-
CABAC压缩
帧内压缩、帧间压缩属于有损压缩技术,而整数离散余弦变换(DCT)与CABAC都属于无损压缩技术。
宏块
-
宏块是视频压缩操作的基本单元
-
无论是帧内压缩还是帧间压缩,都是以宏块作为单位。
假设一张图片的原始图像如下:
H264宏块划分:
以8x8的像素进行划分。
宏块划分完成:
对于宏块,还可以再次进行划分,分成很多的子块:
左侧图中,整个大的块是H264的16x16的块,中间进行平均分配,每一块就是8x8,8x8内又可以划分为4x4,8x4等等。
宏块的大小对程序有着很大的影响,宏块控制的小,压缩时代码有着很高的控制力,但是,如果图片是天蓝色背景,换言之,相似区间非常大时,如果使用大宏块,就会压缩处理的非常快。
如果没有太多细节时,就将宏块划分的大一些,反过来,如果有非常多的细节处理,就需要将宏块的大小控制的小一些。
右侧图中,MPEG2对宏块的处理是不区分,直接统一按照16x16去处理,处理后每一块的数据量都特别多。
而H264对宏块的划分就有着更大的灵活性,可以看见,处理后的数据,每一块宏块的数据量都非常小,整个背景几乎都不用存什么数据,只需要去存储特定的一些数据。
对于H264常见的宏块划分尺寸如下所示:
可以看出来H264的宏块划分非常灵活。