4、帧内预测详解:35种预测模式、Planar/DC/角度模式、模式决策与RDO、参考像素滤波

帧内预测,说白了就是利用当前帧里已经编好的像素,去猜当前块长什么样。H.265 比 H.264 进步了一大截,模式从 9 种直接干到了 35 种。嗯,这 35 种怎么来的?怎么选?选错了代价多大?咱们一个一个说。

4.1 35 种预测模式:从何而来

H.265 的帧内预测,核心思路是用当前块左边和上边已经重建的像素,沿着某个方向去“填充”当前块。这 35 种模式分三类:

  • Planar 模式(模式 0):做双线性插值,适合纹理平缓的区域。
  • DC 模式(模式 1):取左边和上边参考像素的平均值,适合大面积平坦区域。
  • 角度模式(模式 2–34):33 个方向,覆盖从近水平到近垂直的各种纹理走向。

你想想看,33 个角度加上 Planar 和 DC,正好 35 种。为什么是 33 个角度?因为 H.264 只有 8 个角度,到了 H.265 分辨率更高、纹理更细,8 个方向不够用了。我在项目中遇到过 4K 视频的草地场景,用 H.264 的 8 方向预测,边缘全是锯齿;换成 H.265 的 33 方向,平滑度明显提升。

核心记忆点:模式 0 = Planar,模式 1 = DC,模式 2–34 = 角度模式。角度 18 是纯水平,角度 26 是纯垂直。

4.2 Planar 模式:平滑过渡的利器

Planar 模式做的是双线性插值。它用右上角的参考像素做水平方向的渐变,用左下角的参考像素做垂直方向的渐变,然后取平均。公式不复杂,但效果很好——尤其适合天空、墙面这类渐变区域。

我个人习惯在编码风景类视频时,对 32×32 以上的大块优先尝试 Planar。为什么?因为大块里纹理变化缓慢,Planar 的平滑特性正好匹配。我曾经试过强制关闭 Planar,结果码率涨了 8%,画质还没明显提升——白费功夫。

4.3 DC 模式:简单粗暴但有效

DC 模式就是取平均值。左边一列加上边一行,所有参考像素加起来除以个数。嗯,就这么简单。但它有个坑:当参考像素数量很少时(比如块在图像边界),平均值会偏。H.265 的处理方式是只取可用的参考像素,不足的部分用默认值填充。

避坑指南:DC 模式在纹理复杂区域容易产生块效应。我曾经在编码城市街景时,发现 DC 模式预测的块边缘有明显的亮度跳变。后来加了参考像素滤波,情况好多了。

4.4 角度模式:33 个方向怎么用

33 个角度模式,覆盖了从 -135° 到 135° 的范围。每个模式对应一个方向向量,用分数像素精度做插值。H.265 支持 1/32 像素精度的插值,比 H.264 的 1/4 像素精度细得多。

举个例子:模式 18 是纯水平预测,模式 26 是纯垂直预测。模式 10 接近水平向下,模式 34 接近垂直向左。实际编码时,编码器会遍历所有模式,选率失真代价最小的那个。

我记得有一次优化移动端编码器,发现角度模式的计算量占了帧内预测的 60% 以上。后来做了模式快速筛选——先算 8 个粗方向,再在最优方向附近细搜——速度提升了 40%,画质只损失了 0.3dB。值得。

4.5 模式决策与 RDO:选模式不是拍脑袋

35 种模式,全算一遍代价很大。编码器用率失真优化(RDO)来做决策。公式很简单:

J = D + λ × R

其中 D 是失真(通常用 SSE 或 SAD),R 是编码该模式需要的比特数,λ 是拉格朗日乘子。λ 越大,越倾向于选比特少的模式;λ 越小,越倾向于选失真小的模式。

实际编码中,λ 由 QP 决定。QP 越大,λ 越大,编码器会倾向于用更少的比特——哪怕失真大一点。这就是为什么高 QP 下 DC 和 Planar 模式更常被选中,因为它们比特开销小。

个人经验:在低码率场景下,我建议优先检查 Planar 和 DC 模式的 RDO 代价。如果这两个模式的代价已经足够小,可以跳过大部分角度模式的计算。我在一个 500kbps 的直播项目中用这个技巧,编码速度提升了 25%。

4.6 参考像素滤波:别小看这步

参考像素滤波是帧内预测的前置步骤。H.265 对参考像素做 3 抽头或 5 抽头的低通滤波,目的是去除噪声,让预测更平滑。滤波强度由块大小和模式决定:

块大小 滤波方式 适用模式
4×4 不滤波 所有模式
8×8 3 抽头 角度模式(非水平/垂直)
16×16 3 抽头 所有角度模式
32×32 5 抽头 所有角度模式

滤波的副作用是会让参考像素变模糊。如果原始纹理已经很清晰,滤波反而会降低预测精度。我曾经在编码文字图像时发现,滤波后的预测残差反而变大了——因为文字边缘被模糊了。后来我手动关闭了 8×8 块的滤波,文字清晰度明显提升。

4.7 知识体系总览

下面这张图把帧内预测的核心逻辑串起来了。从 35 种模式出发,经过参考像素滤波,再到模式决策与 RDO,最后输出最优模式。你跟着箭头走一遍,基本就清楚了。

帧内预测知识体系 35 种预测模式 Planar(模式 0) DC(模式 1) 角度模式(2–34) 参考像素滤波 模式决策与 RDO 输出最优模式 滤波强度由块大小和模式决定 RDO 权衡失真与比特

4.8 实战建议:模式决策的快速筛选

全模式 RDO 计算量太大,实际编码器都会做快速筛选。我常用的策略是:

  1. 粗选阶段:用 SAD 代替 SSE 做快速代价计算,从 35 种模式中选出 Top 3。
  2. 精选阶段:对 Top 3 模式做完整 RDO(SSE + 真实比特),选最优。
  3. 跳过策略:如果粗选阶段 Planar 或 DC 的代价远小于其他模式,直接跳过精选。

这个策略在 HM 参考软件里就有实现,但默认参数偏保守。我建议你把粗选阶段的候选数从 3 改成 5,对高码率场景更友好。

小技巧:在编码器里加一个统计计数器,记录每个模式被选中的频率。如果某个模式在 1000 个块里只被选中 1 次,可以考虑在快速筛选时直接跳过它。我在一个项目中用这个技巧,把角度模式的候选数从 33 降到了 12,编码速度翻倍。

4.9 总结

帧内预测是 H.265 编码的基石。35 种模式给了编码器丰富的选择,但选择多了,决策成本也高了。Planar 适合渐变,DC 适合平坦,角度模式适合纹理。参考像素滤波能提升预测精度,但别盲目用——文字和边缘场景要小心。RDO 是决策的核心,λ 的取值直接影响码率和画质的平衡。

嗯,这一章的内容就到这。记住:帧内预测不是越复杂越好,而是越匹配越好。选对模式,比选多模式更重要。