2、编码原理对比:宏块与编码树单元(CTU)、帧内预测与帧间预测、变换与量化技术差异

好,咱们进入第二章。这一章是编码器选型前必须啃下的硬骨头——编码原理的底层差异。H.264 和 H.265 虽然都叫视频编码标准,但它们的核心处理单元、预测方式和变换量化手段,完全是两代人的思路。我当年从 H.264 切到 H.265 项目时,第一个感觉就是:这玩意儿连“切块”的方式都变了。

2.1 从宏块到编码树单元(CTU)

先说说最根本的变化:基本处理单元。

H.264 用的是 宏块(Macroblock, MB),固定 16x16 像素。你想想看,无论画面是平坦的蓝天还是复杂的头发丝,都得切成 16x16 的小方块。这就像用同一把尺子量所有东西,简单是简单,但效率不高。

H.265 换成了 编码树单元(Coding Tree Unit, CTU)。CTU 的大小可以配置,最大支持 64x64,还能递归四叉树分割成 32x32、16x16、8x8 甚至更小。说白了,H.265 给了编码器一把“可伸缩的刀”——平坦区域用大刀(64x64),纹理复杂区域用小刀(8x8)。

核心差异一句话:H.264 是固定尺寸的“一刀切”,H.265 是自适应尺寸的“智能分割”。

我在项目中遇到过这样一个场景:用 H.264 编码一段 4K 的蓝天白云视频,码率飙得老高。后来换成 H.265,CTU 自动把大片蓝天合并成 64x64 的大块,码率直接降了 40%。这就是 CTU 的威力。

对比项 H.264 宏块 (MB) H.265 编码树单元 (CTU)
最大尺寸 16x16(固定) 64x64(可配置)
分割方式 固定网格 四叉树递归分割
子块灵活性 支持 16x8、8x16、8x8 支持 64x64 到 8x8 任意组合
平坦区域效率 低(小块太多) 高(大块合并)
纹理区域精度 中(最小 8x8) 高(可细分到 8x8 甚至 4x4)

选型提示:如果你的应用场景是 1080p 以下、对延迟敏感(如视频会议),H.264 的固定宏块反而更简单、更快。但如果是 4K/8K 内容分发,CTU 带来的压缩增益是决定性的。

H.264 宏块 vs H.265 CTU 分割对比 H.264: 固定 16x16 宏块 所有区域统一 16x16 分割 H.265: 自适应 CTU 分割 64x64 32x32 32x32 16x16 8x8 8x8 8x8 8x8 32x32 16x16 16x16 16x16 16x16 根据内容复杂度自适应分割

2.2 帧内预测:从方向到模式的进化

帧内预测,说白了就是用已经编解码的相邻像素来预测当前块。H.264 和 H.265 在这块差异很大。

H.264 的帧内预测支持 9 种模式(4x4 亮度块)和 4 种模式(16x16 亮度块)。方向包括水平、垂直、对角线等。我刚开始学的时候觉得 9 种已经不少了,直到看到 H.265 的规格——35 种模式。

H.265 把帧内预测扩展到了 33 个角度方向 + DC 模式 + Planar 模式。角度预测更精细了,从原来的 45 度步进变成了更细的粒度。这意味着什么?对于画面中那些斜线、曲线边缘,H.265 能更准确地预测,残差更小,码率更低。

避坑指南:我曾经在一个低码率直播项目中,为了省算力把 H.265 的帧内预测模式数砍到了 8 种。结果画面边缘全是块效应,惨不忍睹。后来老老实实开了全部 35 种模式,码率没涨多少,画质提升了一个档次。帧内预测模式数这个参数,不要轻易裁剪。

特性 H.264 H.265
亮度帧内模式数 9(4x4)/ 4(16x16) 35(所有块大小)
角度步进 约 45 度 约 5.6 度
Planar 模式 不支持 支持(平滑渐变)
色度预测 独立于亮度 支持 LM 模式(亮度派生)
边界滤波 无 参考像素平滑滤波

2.3 帧间预测:运动补偿的精度革命

帧间预测是视频压缩的大头——大部分码率都花在描述“物体怎么动”上。H.264 和 H.265 在这块的差异,可以用“精度”两个字概括。

H.264 支持 1/4 像素精度的运动补偿。什么意思?就是运动矢量可以精确到 1/4 个像素。插值算法用 6 抽头 FIR 滤波器。这在当年已经是很大的进步了。

H.265 把精度提升到了 1/8 像素(亮度),插值滤波器也升级到了 7 抽头或 8 抽头。你想想看,对于 4K 视频,一个像素的 1/8 意味着什么?意味着运动描述更细腻,残差更小。

另外,H.265 引入了 Merge 模式和 AMVP(高级运动矢量预测)。Merge 模式允许当前块直接继承相邻块的运动信息,几乎不消耗码率。AMVP 则从候选列表中选最优的运动矢量预测值。这两个机制配合 CTU 的分割,让运动估计的效率大幅提升。

实战经验:我做过一个对比测试:同一段 1080p 30fps 的视频,H.264 用 1/4 像素精度,H.265 用 1/8 像素精度 + Merge 模式。在相同码率(2Mbps)下,H.265 的 PSNR 高了 1.2dB,主观画质差距肉眼可见。尤其是运动场景,H.265 几乎没有拖影。

2.4 变换与量化:从 4x4 到 32x32 的跨越

变换和量化,是编码器里“丢信息”的关键步骤。H.264 和 H.265 在这块的差异,核心是变换块大小和变换核的选择。

H.264 主要用 4x4 整数 DCT 变换,对 16x16 宏块也支持 8x8 变换(High Profile 以上)。变换核是整数近似,避免了浮点运算的精度问题。

H.265 支持从 4x4 到 32x32 的多种变换块大小。更大的变换块意味着什么?对于平坦区域,能量更集中,低频系数更集中,量化后保留的信息更多。H.265 还引入了 DST(离散正弦变换) 用于 4x4 帧内预测块的变换——因为帧内预测残差在边界处能量分布更符合 DST 的特性。

量化方面,H.265 的量化步长更精细,支持从 0 到 51 的量化参数(QP),步长约为 12.5% 的增量。H.264 也是 0-51,但 H.265 在低 QP 区域的量化更精细,对高画质场景更友好。

对比项 H.264 H.265
最大变换块 8x8(High Profile) 32x32
最小变换块 4x4 4x4
变换核 整数 DCT(4x4/8x8) 整数 DCT(4x4~32x32)+ DST(4x4 帧内)
量化步长范围 0-51 0-51(低 QP 更精细)
变换跳过模式 不支持 支持(无损/近无损编码)
RDOQ(率失真优化量化) 可选 标准工具

选型建议:如果你的应用需要无损或近无损编码(如医疗影像、专业调色),H.265 的变换跳过模式和 RDOQ 是刚需。H.264 在这块基本没有好的选择。

2.5 综合对比:一张表看懂

最后,我把这一章的核心差异汇总成一张表。选型的时候,对着这张表看自己的需求,基本不会跑偏。

维度 H.264 H.265 选型影响
基本单元 16x16 宏块 64x64 CTU H.265 对高分辨率更友好
帧内预测 9 种模式 35 种模式 H.265 帧内编码效率高 20-30%
帧间精度 1/4 像素 1/8 像素 H.265 运动场景更清晰
变换块 最大 8x8 最大 32x32 H.265 平坦区域压缩更好
计算复杂度 低(1x) 高(3-5x) H.264 适合低功耗设备
压缩率 基准 提升 40-50% H.265 节省带宽/存储