H264编码原理(宏块)

H264压缩技术

  • 帧内压缩技术,解决的是空域数据冗余问题

    假设一张图片是天蓝色背景,整个天蓝色背景就可以用很小的数据量进行存储,背景前的人也会有对应的算法进行处理。

  • 帧间压缩技术,解决的是时域数据冗余问题

    所谓时域就是随之时间的推移,每个时间段都会有一帧数据,一帧一帧的数据间,可以做参考。
    例如第一帧是I帧,虽然压缩比不是太高,但是第二帧可以根据第一帧做参考,可以获得更高的压缩比。也就是将同一GOP组中的相同数据存储在参考帧内,后面的帧可以用更少的数据记录。

  • 整数离散余弦变换(DCT),将空间的相关性变为频域上无关的数据,然后进行量化

  • CABAC压缩

帧内压缩、帧间压缩属于有损压缩技术,而整数离散余弦变换(DCT)与CABAC都属于无损压缩技术。

宏块

  • 宏块是视频压缩操作的基本单元

  • 无论是帧内压缩还是帧间压缩,都是以宏块作为单位。

假设一张图片的原始图像如下:
H264编码原理(宏块)_第1张图片
H264宏块划分:
H264编码原理(宏块)_第2张图片
以8x8的像素进行划分。

宏块划分完成:
H264编码原理(宏块)_第3张图片
对于宏块,还可以再次进行划分,分成很多的子块:
H264编码原理(宏块)_第4张图片
左侧图中,整个大的块是H264的16x16的块,中间进行平均分配,每一块就是8x8,8x8内又可以划分为4x4,8x4等等。
宏块的大小对程序有着很大的影响,宏块控制的小,压缩时代码有着很高的控制力,但是,如果图片是天蓝色背景,换言之,相似区间非常大时,如果使用大宏块,就会压缩处理的非常快。
如果没有太多细节时,就将宏块划分的大一些,反过来,如果有非常多的细节处理,就需要将宏块的大小控制的小一些。

右侧图中,MPEG2对宏块的处理是不区分,直接统一按照16x16去处理,处理后每一块的数据量都特别多。
而H264对宏块的划分就有着更大的灵活性,可以看见,处理后的数据,每一块宏块的数据量都非常小,整个背景几乎都不用存什么数据,只需要去存储特定的一些数据。
对于H264常见的宏块划分尺寸如下所示:
H264编码原理(宏块)_第5张图片
可以看出来H264的宏块划分非常灵活。

你可能感兴趣的:(ffmpeg-mac,ffmpeg笔记)