什么是宏块(Macroblock)?
在传统的视频编码标准(如 MPEG-2 或 H.264)中,宏块是进行预测、变换、量化和编码的基本单元。
- 基本组成:一个标准的宏块通常涵盖 16x16 个像素的亮度(Luma)区域,以及对应的色度(Chroma)区域。
- 核心逻辑:视频压缩的基础是“消除冗余”。宏块的存在是为了让编码器能够针对一小块图像区域决定:它是应该从上一帧移动过来的(运动补偿),还是应该直接描述细节(帧内预测)。
什么是宏块划分?
H.264的宏块划分
基本概念
H.264 中,一个宏块的基本尺寸为 16×16 像素(亮度 Y 分量)。
在 YUV 4:2:0 采样格式下:
- Y(亮度):16×16
- U(色度):8×8
- V(色度):8×8
因此,一个宏块实际包含:
- 256 个亮度像素
- 64 个 U 色度像素
- 64 个 V 色度像素
宏块是运动估计、预测、变换、量化和熵编码的基本处理单位。
宏块的分类
H.264 根据编码方式的不同,将宏块分为以下几类:
1)帧内宏块(Intra MB)
- 不参考其他帧
- 只利用当前帧内的已编码像素进行预测
- 主要用于I 帧,也可出现在 P/B 帧中
帧内宏块支持多种预测模式:
- Intra 16×16:整块预测
- Intra 4×4 / Intra 8×8:更细粒度预测,适合纹理复杂区域
2)帧间宏块(Inter MB)
- 参考之前或之后的帧
- 使用运动补偿进行预测
- 常见于P 帧和 B 帧
帧间宏块是 H.264 提高压缩率的核心。
3)Skip 宏块
- 特殊的帧间宏块
- 不传输残差和运动向量
- 解码器可直接推导
- 在静态或低运动场景中大量出现
宏块的子块划分方式
H.264 的一个关键创新是:
宏块可以被灵活地划分为多个不同大小的子块进行预测
帧间预测的宏块划分
对于 Inter 宏块,16×16 的宏块可以进一步划分为以下几种方式:
- 16×16(不划分)
- 16×8(上下两个子块)
- 8×16(左右两个子块)
- 8×8(四个子块)
而8×8 子块还可以继续细分为:
- 8×4
- 4×8
- 4×4
最小可到4×4的运动补偿块。
这种多层次划分方式使得编码器能够:
- 对平坦区域使用大块,减少码率
- 对运动复杂或边缘区域使用小块,提高预测精度
帧内预测的宏块划分
帧内预测主要分为:
- Intra 16×16
- Intra 8×8(High Profile)
- Intra 4×4
小块帧内预测可以更好地适应:
- 细节纹理
- 锐利边缘
- 高频信息
宏块在编码流程中的位置
一个宏块在 H.264 编码流程中依次经历:
- 宏块类型判定(Intra / Inter / Skip)
- 宏块划分方式选择
- 帧内或帧间预测
- 计算残差
- 整数变换(4×4 / 8×8)
- 量化
- 熵编码(CAVLC / CABAC)
H.265的宏块划分(CTU)
CTU的概念
在 H.264/AVC 中,视频编码的基本处理单元是宏块(Macroblock,MB),固定大小为16×16 像素。这种固定尺寸在早期分辨率下尚可接受,但随着高清(1080p)乃至超高清(4K、8K)视频的普及,编码效率和灵活性逐渐成为瓶颈。
H.265/HEVC 引入了全新的块结构体系,用编码树单元(Coding Tree Unit,CTU)取代传统宏块,作为编码的最基本顶层单元。CTU 是 H.265 提升压缩效率、支持超高清编码的核心设计之一。
CTU 的基本结构与尺寸
CTU 的尺寸不再固定,支持以下几种大小:
- 64×64(最常用、默认)
- 32×32
- 16×16
编码器可根据配置或视频特性选择 CTU 的最大尺寸。实际应用中,64×64 CTU 是主流选择,尤其适用于高分辨率视频。
CTU 是编码结构的“根节点”,后续所有子块划分都基于 CTU 进行。
CTU 包含的三个核心单元
一个 CTU 在逻辑上包含三类单元:
- 编码单元(CU, Coding Unit)
- 预测单元(PU, Prediction Unit)
- 变换单元(TU, Transform Unit)
它们通过树状结构(四叉树)进行层级划分,各司其职。
CU:编码单元的树状划分
1. 四叉树划分机制
CTU 通过四叉树(Quadtree)递归划分为多个 CU。
每一次划分,当前 CU 被分成 4 个等大小子 CU。
例如,一个 64×64 的 CTU 可以这样划分:
- 不划分:1 个 64×64 CU
- 划分一次:4 个 32×32 CU
- 再划分:16 个 16×16 CU
- 继续划分:64 个 8×8 CU(最小 CU)
最小 CU 通常为8×8(也可配置为 16×16)。
2. CU 的作用
CU 是编码决策的核心单元,主要决定:
- 是否继续划分
- 使用帧内预测还是帧间预测
- 参考帧选择
- 运动估计模式
编码器会根据率失真优化(RDO)在不同 CU 划分方案中选择最优结构。
PU:预测单元的灵活划分
1. PU 的功能
PU 决定预测方式与预测区域形状,主要服务于:
- 帧内预测(Intra)
- 帧间预测(Inter)
PU 并不直接决定编码结构,而是描述预测行为。
2. PU 划分模式
在一个 CU 内,PU 可采用多种形状,例如:
- 对称划分:
- 2N×2N
- N×2N
- 2N×N
- 非对称划分(AMP):
- 2N×nU / 2N×nD
- nL×2N / nR×2N
这些灵活的 PU 形状可以更精准地匹配物体边缘和运动方向,显著提升运动补偿精度。
TU:变换单元的自适应设计
1. TU 的作用
TU 决定残差的变换与量化方式,对应传统 DCT/IDCT 处理流程。
2. TU 的划分方式
TU 同样采用四叉树结构(Residual Quadtree, RQT):
- 最大 TU:32×32
- 最小 TU:4×4
TU 的划分可以与 CU、PU 不一致,使得平坦区域使用大变换块、细节区域使用小变换块,从而提高能量集中度和编码效率。
CTU 划分带来的优势
1. 对高分辨率视频更友好
- 大 CTU 能覆盖更大平坦区域
- 减少块边界,提高压缩效率
- 降低编码开销
2. 更强的自适应能力
- CU 负责结构决策
- PU 负责预测模式
- TU 负责变换精度
三者解耦,使编码更灵活。
3. 明显提升压缩性能
相比 H.264,HEVC 在相同画质下:
- 码率降低约40%~50%
- 对 4K/8K 视频优势尤为明显
H.265 通过引入 CTU 及其多层级划分结构,彻底打破了 H.264 固定宏块尺寸的限制。CTU + CU + PU + TU 的层次化设计,使编码器能够在空间预测、时间预测和频域变换三个维度进行精细优化。这种结构是 HEVC 能够高效支持超高清和复杂视频内容的关键基础。
宏块/CTU 划分的具体流程
无论是 H.264 的宏块分割,还是 H.265 的四叉树递归,其核心流程都可以概括为以下四个阶段:
第一阶段:初始化与预分析
编码器首先读入当前原始图像帧,并将其划分为固定大小的网格(H.264 为 16x16,H.265 为 64x64)。
- 计算纹理复杂度:编码器会初步计算该区域的方差。如果方差很小(区域平坦),编码器会倾向于不划分;如果方差很大,则预判需要细分。
第二阶段:递归搜索与模式尝试
这是最耗费计算资源的阶段。以 H.265 为例,流程如下:
- 从最大尺寸开始:首先尝试以 64x64 作为编码单元(CU)。
- 计算代价:计算该尺寸下的率失真代价(RD Cost)。
- 公式参考:J = D + λ x R(其中 J 是代价,D 是失真,R 是码率,λ 是拉格朗日乘子)。
- 四叉树拆分:将 64x64 拆分为四个 32x32 的块,对每一个子块重复计算模式(帧内/帧间)和代价。
- 继续向下递归:直到达到最小限制(如 8x8 )或代价不再减小。
第三阶段:自底向上的最优路径选择
当所有可能的划分组合都计算完代价后,编码器进行“剪枝”比对:
- 比较“一个 32x32 块的代价”与“四个 16x16 子块代价之和”。
- 如果拆分后的总代价更小,则保留拆分结果;否则,合并回大块。
第四阶段:确定最终划分并写入码流
最终确定的划分结构会被编码成一系列划分标志位(Split Flags)。解码器读取这些 0 和 1,就能完全还原出编码器当时的拆分形状。
宏块划分要实现的功能
宏块划分不仅仅是为了把图切碎,它承载了视频压缩中四个关键的任务功能:
1. 实现自适应预测(Adaptive Prediction)
- 功能描述:不同的图像内容需要不同的预测策略。
- 意义:在一个宏块内,如果左半边是静态背景,右半边是运动物体,通过划分,左半边可以采用**跳过模式(Skip Mode)*不花码率,而右半边采用*运动补偿。这种灵活分配的能力是压缩高动态视频的基础。
2. 精准匹配运动矢量(MV Precision)
- 功能描述:宏块划分越细,运动矢量(MV)的粒度就越细。
- 意义:对于旋转、缩放或细微颤动的物体,大块无法精确描述其位移。细小划分(如4×44 \times 44×4)能为每个微小区域提供独立的运动矢量,极大减小了预测后的残差(Residual),从而节省了传输残差所需的比特。
3. 优化变换与量化(Transform Efficiency)
- 功能描述:划分直接影响变换单元(TU)的大小。
- 意义:*大 TU:适合平滑区域,能将能量集中在极少数低频系数上,压缩率极高。
- 小 TU:适合高频细节(如文字边缘、树叶),能防止量化误差扩散,有效抑制“蚊式噪声”和“环状效应”。
4. 码率控制与缓冲区平衡
- 功能描述:动态调整划分深度以满足带宽限制。
- 意义:当网络带宽下降时,编码器会强制减少划分深度(多用大块),虽然牺牲了一部分细节,但保证了视频的流畅度,实现了码率自适应的功能。