本节摘要:帧内预测的模式数是四代标准最直观的军备竞赛:H.264 九个方向,HEVC 三十三个方向,VVC 六十五个,AV1 不比数量比密度——在关键角度附近以三度步长加密,再叠加平滑类、Paeth 与 CFL,大块的候选可达上百个。本节对照四套词汇量的构成,并算清"模式变多"在码率与复杂度两端的账。
帧内预测的本质是空间外推:块内还没编码的像素,用上边和左边的已重建像素沿某个方向"推"出来。推的方向对不对,直接决定残差有多大——斜向的栅栏、发丝、百叶窗,方向差一度,残差能量差一截。方向模式库就是编码器的"角度词汇表",词汇越密,能精确描述的纹理越多。
但词汇表不是白来的。每个候选模式都要写进码流(哪怕是用上下文编码的短符号),更要命的是编码器在率失真优化时要把每个模式都试一遍。模式数每翻一倍,帧内决策的编码时间大致翻倍。这场军备竞赛的每一轮扩编,都是在"压缩收益"与"编码时间"之间重新报价。
| 标准 | 方向模式 | 非方向模式 | 参考像素处理 | 特殊机制 |
|---|---|---|---|---|
| H.264 | 8 个方向 + DC(4×4 与 16×16 略有差异) | DC、Plane | 单行参考 | 4×4 亮度预测为主 |
| HEVC | 33 个等步长方向 | DC、Planar | 一次平滑滤波 | 参考行替换(SRF)类工具有限 |
| AV1 | 基础方向 + 关键角度附近三度步长加密 | DC、SMOOTH、SMOOTH_H/V、PAETH | 参考像素可平滑/可复制 | 色度 CFL、帧内复制 |
| VVC | 65 个等步长方向 | DC、Planar | 多参考行可选 | MIP 矩阵预测、ISP、TDPCM |
HEVC 把方向从九个扩到三十三个,等步长铺满半圆,这是第一轮"广撒网";VVC 再翻倍到六十五个,同时引入多参考行——不再只看紧邻的一行像素,可以选更远的参考行躲开被滤波污染的边界。两代走的是"等间距铺满"的路子。
AV1 的思路不同:它保留等间距的八类基础方向,但在水平与垂直角度附近(真实图像纹理最集中出现的区间)把角度步长加密到三度,远端区间步长较粗。这相当于承认纹理分布不均匀——斜四十五度的内容远比斜七十度的常见。再叠加三个非方向成员:DC(平坦块)、双向与单向 SMOOTH(渐变阴影)、PAETH(取相邻像素差值最小的经典启发式,来自无损图像压缩领域)。
# AV1 帧内模式信令示意(伪结构) intra_frame_y_mode : 逐块编码 ├─ DC_FILTER / DC_128 # 平坦块 ├─ V / H # 垂直、水平 ├─ H_114 / V_94 / ... # 关键角度加密成员(3 度步长) ├─ SMOOTH / SMOOTH_H / SMOOTH_V ├─ PAETH └─ 方向成员后附 angle_delta # 在基础角度上再做 ±3 度内的微调
注意最后一行:AV1 允许在选中某个方向后再附加一个角度增量,等于把"固定菜单"变成"菜单加微调"。这是它用较少的模式枚举实现更细角度覆盖的技巧。
收益端看一组量级:在静止斜纹理内容上,从九方向到三十三方向的编码增益约在百分之几的量级;从三十三方向到 AV1 的加密角度加微调,增益继续累积但边际递减。真正的乘法效应发生在组合上——方向模式 × 调色板 × 帧内复制 × CFL,屏幕内容与普通相机内容的工具互补,收益才能叠起来。
代价端则是乘性增长:帧内候选上百个,编码器逐个试错的时间不可接受。主流实现都做两级筛选——先用低成本指标(SAD/SATD)海选,再对前几名做率失真精算。这也是为什么同样号称"慢工出细活",不同编码器在同一标准上的速度差可达十倍:快的那个海选更聪明,而不是词汇表更短。
⚠️ 做编码参数调优时别关掉方向模式的加密成员来提速——收益损失远大于时间节省。正确的提速位置是海选阶段的候选上限与下钻深度,第 7 章 preset 对照会回到这个话题。
选方向模式不只是预测的事:残差的方向性决定了哪个变换核效率最高。AV1 因此把帧内方向与变换选择联动(方向性变换 ADST/FLIP_ADST 的引入位置与预测方向挂钩),VVC 的 MTS 同理。孤立背"AV1 有几种方向模式"意义有限,把它与第 5 章的变换核对照连起来读,才能理解为什么各家模式表长得不一样。
问:为什么 H.264 只有九个方向也"够用"了这么多年?
答:够用是相对码率水平而言的。低码率下残差本来就大,方向预测的精度差异被量化误差淹没,九个方向与三十五个方向的差距体现不出来;高码率下差距才显性化。H.264 服役的年代主流码率低,工具的边际收益撑不起复杂度——工具适配时代,时代变了工具跟着换。
问:非方向模式(平滑、Paeth)什么时候会赢?
答:渐变阴影、虚化背景这类"没有方向的方向"归平滑族;金属光泽、屏幕玻璃反光这类"像素值等于邻居极值"的质感归 Paeth。有趣的规律是:这些非方向模式在照片里是配角,但在合成图形与 UI 内容里常常反客为主——内容类型决定谁是主角。
问:角度微调(angle_delta)为什么不干脆做成更多固定方向?
答:信令与搜索的双重经济。固定方向每加一个都要占模式表的枚举位、都要进海选;微调只对已选中的方向加一个小增量符号,信令按需付费。这种"粗枚举加精修正"的组合拳,在后面参考帧槽位、量化分段的设计里还会反复看到。
补一个工程视角的对照观察:帧内预测的方向模式数量必须与块划分粒度配套理解才有意义——大块(32×32 以上)用 56 个细分角度才划得来(一个方向误差在几百个像素上会被放大),而 4×4 小块干脆退回少数几个粗方向加 DC/PAETH 就够(小块本身已贴合边缘,精细方向的收益覆盖不了角度编码的码字开销)。这个"块越大方向越细"的耦合正是 AV1 对照 HEVC 时最常被误读的数字——56 对 35 的对比忽略了两者在小块档位上的处理完全不同。做码流分析时遇到帧内块反复切换方向模式的序列,优先怀疑内容纹理周期与块尺寸的错配,这是实拍噪声源的典型指纹。