4、编码核心原理对比(二):帧内预测模式的演进与优化
帧内预测,说白了就是利用当前帧里已经编好的像素,去猜还没编的像素长什么样。H.264 和 H.265 在这块儿的思路完全不一样。我刚开始接触 H.265 时,看到那 35 种模式直接懵了——心想这得算到猴年马月去?后来才发现,模式多了不代表全都要算,关键是怎么快速找到最合适的那个。
4.1 H.264 的帧内预测:简单但够用
H.264 把帧内预测分成两种块大小:16×16 和 4×4。16×16 适合平坦区域,4×4 适合纹理复杂的区域。每种大小都有固定的预测方向。
- 16×16 亮度块:4 种模式(垂直、水平、DC、平面)
- 4×4 亮度块:9 种模式(8 个方向 + DC)
- 8×8 色度块:4 种模式(与 16×16 亮度类似)
我记得第一次调 H.264 编码器时,发现 4×4 的预测方向其实挺直观的。比如垂直模式就是直接复制上边一行像素,水平模式复制左边一列。DC 模式取平均值,平面模式做个渐变。说白了,就是拿相邻像素做简单的数学运算。
4.2 H.265 的帧内预测:精细到 35 种方向
H.265 把帧内预测的粒度大幅提升了。亮度块支持从 4×4 到 32×32 共 5 种大小,每种大小都有 35 种预测模式。这 35 种包括:33 个角度方向 + DC + 平面。
为什么会增加这么多方向?你想想看,H.264 只有 8 个方向,遇到斜着的纹理,预测出来的像素跟实际差距很大。H.265 把角度细分到每 2.5 度一个方向,基本上能覆盖自然界里大部分纹理走向。
| 特性 | H.264 | H.265 |
|---|---|---|
| 亮度块大小 | 16×16, 4×4 | 4×4, 8×8, 16×16, 32×32 |
| 角度模式数 | 8(4×4 块) | 33 |
| 非角度模式 | DC, 平面 | DC, 平面 |
| 色度预测 | 4 种模式 | 5 种模式(含 LM 模式) |
这里有个关键点:H.265 的平面模式比 H.264 复杂得多。它不光考虑上边和左边的像素,还考虑了右下角的参考像素,做双线性插值。我在项目中遇到过,平面模式对渐变区域的预测效果特别好,码率能省 10% 左右。
4.3 角度预测的精细化:从 8 到 33
H.264 的 8 个方向,说白了就是 0°、45°、90°、135° 这些整数角度。H.265 的 33 个方向覆盖了从 -135° 到 180° 的范围,每两个相邻方向之间只差 2.5° 左右。
这种精细化带来的好处很明显:预测残差更小,编码效率更高。但代价是计算量暴增。你想想看,每个块都要从 35 种模式里选一个最优的,如果全算一遍,编码时间直接翻好几倍。
4.4 最可能模式(MPM)的演进
H.264 也有 MPM,但逻辑比较简单。它根据左边和上边块的模式,推导出当前块最可能用哪个模式。如果左边和上边模式相同,就只传一个 MPM 标志;如果不同,就传两个候选。
H.265 的 MPM 机制复杂多了。它维护一个长度为 3 的 MPM 列表,推导规则包括:
- 左边块和上边块的模式
- 左边块和上边块的衍生模式(比如 +1、-1 方向)
- DC 和平面模式作为保底
我记得有次做码率分析,发现 H.265 的 MPM 命中率能达到 70% 以上。也就是说,大部分块只需要传一个 1-2 bit 的索引,就能确定预测模式。这比 H.264 的 MPM 效率高出一大截。
4.5 色度预测的改进:LM 模式
H.265 引入了一个新东西:LM(Linear Model)模式。它利用亮度像素和色度像素之间的线性关系,通过已重建的亮度像素来预测色度像素。
这个模式在屏幕内容编码中特别有用。比如你有一段动画,画面里有很多纯色区域,亮度变化和色度变化高度相关。用 LM 模式预测,色度残差几乎为零。
H.264 没有这个模式,色度只能从相邻色度像素预测。遇到亮度变化剧烈但色度变化平缓的区域,H.264 的色度预测效率就很差。
4.6 帧内预测的优化策略
在实际工程中,全模式搜索是不现实的。我总结了几条优化经验:
- 粗选阶段用 SATD:计算速度快,能快速排除明显不好的模式
- 利用 MPM 优先:先算 MPM 列表里的模式,如果残差足够小,直接跳过其他模式
- 大块优先:32×32 和 16×16 的预测模式少,先算大块,再根据大块的结果决定是否细分
- 跳过对称模式:如果垂直模式残差很大,水平模式通常也好不到哪去
4.7 实际编码中的选择策略
说了这么多理论,咱们聊聊实际编码器里怎么选模式。我常用的策略是这样的:
- 快速编码模式:只算 MPM 列表里的 3 个模式 + DC + 平面,选残差最小的。速度最快,码率损失约 3-5%。
- 中等编码模式:先算 MPM 和 DC/平面,再根据残差大小决定是否扩展搜索范围。适合直播场景。
- 高质量编码模式:全模式搜索 + 完整 RD 计算。适合离线转码,码率最优。