4. H265编码原理入门
H.265(HEVC)相比 H.264 的核心提升,并不是简单地把宏块改小或把搜索范围加大,而是重新设计了一套更灵活的“块结构 + 预测 + 变换”体系。理解 H.265 的编码原理,最关键的是抓住四个入口:编码树单元(CTU)、四叉树划分、多角度帧内预测和先进运动矢量预测(AMVP)。它们共同决定了 H.265 在相同画质下能比 H.264 节省约 40%~50% 码率的根本原因。
一、编码树单元:从宏块到树形块结构
H.264 的基本处理单位是 16×16 宏块,宏块内部再分为 16×16、16×8、8×16、8×8 等子块。H.265 则把基本单位提升为编码树单元 CTU,尺寸可以是 16×16、32×32 或 64×64,由编码器配置决定。CTU 不是直接编码的块,而是一棵“编码四叉树”的根节点。它向下递归划分,直到得到适合当前图像内容的编码单元 CU。
可以把 CTU 理解成一块“可裁剪的布料”:平坦区域用大 CU 一次编码,纹理复杂或运动剧烈的区域用小 CU 精细描述。这种“按内容自适应”的块划分,是 H.265 压缩效率提升的第一层来源。
二、四叉树划分:CU、PU、TU 的三级结构
H.265 的块划分不是单一层次,而是 CU、PU、TU 三级协同:
- CU(Coding Unit):编码单元,决定变换和量化的基本范围,由 CTU 四叉树递归划分得到。
- PU(Prediction Unit):预测单元,承载帧内或帧间预测信息。帧内 PU 支持 2N×2N、N×N;帧间 PU 支持 2N×2N、2N×N、N×2N、N×N 以及非对称划分 AMP。
- TU(Transform Unit):变换单元,承载 DCT/DST 变换和量化,尺寸从 4×4 到 32×32,同样支持四叉树递归。
四叉树划分的决策依据是率失真优化(RDO):编码器会尝试不同深度,计算“码率 + 失真”的代价,选择代价最小的划分方式。深度越深,块越小,预测越精细,但头信息和变换开销也越大。
三、多角度帧内预测:35 种模式的方向建模
H.264 帧内预测只有 9 种模式(4×4 亮度),方向分辨率较粗。H.265 把帧内预测扩展到 35 种模式:1 种 Planar、1 种 DC,以及 33 种角度模式(模式 2~34),角度覆盖从约 45° 到 225°,步进更细。这样,斜向纹理、边缘、渐变区域都能找到更贴近真实方向的角度,预测残差更小。
帧内预测的基本流程是:利用当前 PU 左侧和上方的已重建像素作为参考,按选定模式生成预测块,再与原始块相减得到残差。H.265 还引入了参考像素平滑滤波和强/弱滤波切换,在平滑区域减少块效应,在纹理区域保留细节。
帧内预测模式分布(亮度):
模式 0 : Planar(平面)
模式 1 : DC(均值)
模式 2~34: 33 种角度模式
常用角度示例:
模式 10 : 水平方向
模式 18 : 对角线方向
模式 26 : 垂直方向
模式 34 : 对角方向
四、先进运动矢量预测 AMVP:从邻块到候选列表
帧间预测的核心是运动矢量(MV)。H.265 不再像 H.264 那样只依赖中值预测,而是采用 AMVP(Advanced Motion Vector Prediction):从当前 PU 的空域邻块(左、上、右上、左下等)和时域同位块中收集候选 MV,构建一个长度为 2 的候选列表,再通过率失真代价选择最优 MVP,最后只编码运动矢量残差 MVD。
AMVP 的价值在于:候选 MV 更接近真实运动,MVD 更小,运动信息编码开销显著降低。同时,H.265 还引入 Merge 模式,直接复用邻块或同位块的完整运动信息(MV + 参考帧索引),在运动一致区域几乎不传运动信息。
五、整体流程与参数关系
把上述机制串起来,H.265 编码一帧图像的基本流程是:图像划分为 CTU → CTU 四叉树递归得到 CU → CU 划分 PU 和 TU → PU 做帧内或帧间预测 → TU 做变换量化 → 熵编码。每一步都围绕“用更少的比特描述同样的视觉内容”展开。
| 机制 | H.264 对应 | H.265 改进 | 主要收益 |
|---|---|---|---|
| 基本块 | 16×16 宏块 | 16/32/64 CTU | 大平坦区更省头信息 |
| 块划分 | 固定宏块+子宏块 | CU/PU/TU 四叉树 | 内容自适应更精细 |
| 帧内预测 | 9 种模式 | 35 种模式 | 方向预测更准,残差更小 |
| 运动矢量预测 | 中值预测 | AMVP + Merge | MVD 更小,运动开销更低 |
| 变换 | 4×4/8×8 DCT | 4~32 TU,DCT/DST | 变换更贴合残差分布 |
六、案例与常见误区
假设一段 1080p 视频中有一片天空和一棵树。天空区域平坦,编码器倾向选择 64×64 CTU 下的大 CU,帧内用 Planar 或 DC 模式,TU 也用大尺寸,码率极低;树叶区域纹理复杂,四叉树会继续向下划分到 8×8 甚至 4×4 CU,帧内选择接近纹理方向的角度模式,残差被大幅压缩。运动部分,树枝摆动区域用 AMVP 找到邻近相似 MV,MVD 很小;背景静止区域用 Merge 模式直接复用 MV,几乎不传运动信息。
常见误区有三个:
- 误以为 CTU 越大越好。 64×64 CTU 在平坦区有优势,但在复杂纹理区会导致划分深度增加,RDO 计算量上升,编码速度下降。
- 误以为 35 种帧内模式一定比 9 种好。 模式越多,模式决策的搜索开销越大,低复杂度编码器可能只启用部分角度模式。
- 误以为 AMVP 就是 Merge。 AMVP 传 MVD,Merge 不传 MVD;前者适合运动不一致区域,后者适合运动一致区域,二者互补。
掌握这四个基本流程后,再去看 H.265 的编码参数(如 CTU 大小、最大划分深度、帧内模式数量、AMVP 候选数)时,就能理解每个参数背后对应的压缩机制。H.265 的性能优势不是某一个单点技术带来的,而是 CTU 四叉树、35 种帧内预测、AMVP/Merge 和 TU 变换共同作用的结果。