引言:帧内预测是I帧压缩的"灵魂"
I帧不依赖任何参考帧,完全依靠空间相关性进行压缩。帧内预测的质量直接决定了I帧的编码效率,也影响着P/B帧的残差能量------因为帧间预测的参考帧本身是经过帧内编码后重建的。H.266/VVC在HEVC的35种帧内模式基础上,将方向模式扩展到67种,并引入MIP、PDPC、ISP、CCLM等一系列增强工具,使帧内编码效率较HEVC提升约15-25%。
然而,67种方向模式加上MIP、ISP等扩展模式,使得帧内模式决策的计算量急剧膨胀。VTM中帧内编码耗时约占总编码时间的30-40%,其中模式决策占据了绝大部分。如何在保持压缩效率的同时大幅降低帧内决策复杂度,是工程编码器的核心挑战。
本文从算法原理到工程落地,系统梳理VVC帧内预测的关键技术,并给出可复用的优化策略与配置模板。
67种方向模式:从粗到细的角度覆盖
模式扩展
HEVC定义了35种帧内模式(Planar + DC + 33种方向),VVC将其扩展到67种(Planar + DC + 65种方向)。方向模式的角度间隔从HEVC的约5.6°缩小到约2.8°,对纹理方向丰富的区域提供更精准的预测。
65种方向模式编号为2-66:
- 模式2:水平方向(从左到右)
- 模式34:对角方向(左上到右下)
- 模式50:垂直方向(从上到下)
- 模式18:水平偏上
- 模式66:垂直偏左
宽角度模式(Wide Angle)
VVC引入了宽角度模式的概念:对于非方形CU(如2:1或1:2的矩形块),将部分方向模式映射为"宽角度",使预测方向更贴合CU的几何形状。
例如,对于宽度>高度的CU,模式2-17被替换为模式67-82(宽角度),使水平方向的预测更加精细;对于高度>宽度的CU,模式51-66被替换为模式-1至-16(宽角度),使垂直方向的预测更加精细。
工程意义:宽角度模式在矩形CU上可获得约0.3-0.5% BD-rate增益,尤其在屏幕内容(大量矩形文字区域)中效果显著。
模式粗选:HADAMARD预筛选
全67种模式的RDO搜索代价过高。VVC采用HADAMARD变换进行粗选:
- 对67种模式分别计算HADAMARD残差代价
- 选取代价最小的Top-N模式进入RDO精搜
- N的取值取决于CU尺寸:大CU取Top-8,小CU取Top-16
工程优化:实测表明,Top-8粗选可覆盖约95%的最优模式,将帧内决策耗时降低约70%。对实时编码器,可进一步压缩至Top-4,BD-rate损失仅0.1-0.2%。
MIP矩阵加权预测:用神经网络思维做帧内
核心思想
传统方向模式假设预测值由参考像素沿固定方向线性外推得到,但真实图像的局部结构往往更复杂。MIP(Matrix-based Intra Prediction)借鉴了神经网络中全连接层的思想:将参考像素作为输入向量,通过预训练的权重矩阵进行线性变换,生成预测块。
MIP的工作流程:
- 降采样:对上方和左侧参考像素进行降采样,得到固定长度的输入向量(4/8/12维)
- 矩阵乘法:输入向量与预训练权重矩阵相乘,得到降采样预测值
- 上采样:对降采样预测值进行线性插值,得到完整预测块
三组权重矩阵
VVC为不同CU尺寸预训练了三组权重矩阵:
| 矩阵组 | 适用CU尺寸 | 输入维度 | 输出维度 | 矩阵大小 |
|---|---|---|---|---|
| 组0 | ≤4×4 | 8 | 16 | 16×8 |
| 组1 | 4×4 < 面积 ≤ 64 | 8 | 16 | 16×8 |
| 组2 | 面积 > 64 | 12 | 32 | 32×12 |
每组包含18个候选矩阵(索引0-17),编码器通过RDO选择最优矩阵索引。
MIP的压缩增益
MIP在VTM中贡献约0.5-0.8% BD-rate增益,主要受益场景:
- 纹理复杂、方向不明确的区域
- 小尺寸CU(4×4、8×8)
- 屏幕内容中的渐变区域
工程挑战:MIP涉及矩阵乘法运算,硬件实现需要大量MAC单元。VVenC的优化策略:
- 权重矩阵量化为8bit定点数,用移位替代除法
- 对大CU(≥32×32)跳过MIP(增益极小)
- 用SATD预筛选Top-4矩阵索引,避免全18索引RDO搜索
PDPC位置依赖的预测组合:边界修正的艺术
核心思想
传统帧内预测对整个CU使用统一的预测公式,但靠近参考像素边界的区域预测质量通常优于远离边界的区域。PDPC(Position Dependent Intra Prediction Combination)对靠近边界的像素施加额外的加权修正,利用未滤波的参考像素进行局部补偿。
PDPC的修正公式:
P′(x,y)=wT⋅PT(x)+wL⋅PL(y)+(1−wT−wL)⋅P(x,y)P′(x,y)=wT⋅PT(x)+wL⋅PL(y)+(1−wT−wL)⋅P(x,y)
其中 P(x,y)P(x,y) 为原始预测值, PT(x)PT(x) 为上方参考像素, PL(y)PL(y) 为左侧参考像素, wTwT 和 wLwL 为位置依赖的权重。
权重设计
权重随像素位置衰减:
wT=32≫(⌊yd⌋),wL=32≫(⌊xd⌋)wT=32≫(⌊dy⌋),wL=32≫(⌊dx⌋)
其中 dd 为衰减速率,取决于预测模式:
| 模式类型 | d值 | 说明 |
|---|---|---|
| Planar | 1 | 快速衰减 |
| DC | 2 | 中等衰减 |
| 方向模式(水平/垂直附近) | 1-2 | 模式依赖 |
| 其他方向模式 | 32 | 几乎不衰减 |
关键洞察:PDPC对Planar和DC模式增益最大(约0.3-0.5%),对纯方向模式增益较小。这是因为Planar/DC模式的预测误差在边界处最大,PDPC的边界修正恰好弥补了这一缺陷。
工程实现
PDPC的计算开销极低(仅加权求和),VVenC和x266均全量启用。唯一的优化点是:当 wT+wL<1wT+wL<1 时(即权重已衰减到可忽略),可直接跳过PDPC计算。
ISP帧内子块划分:化整为零的智慧
核心思想
传统帧内预测对整个CU使用同一种预测模式,但大CU内部可能存在多种纹理方向。ISP(Intra Sub-Partition)将CU沿水平或垂直方向划分为2或4个子块,每个子块独立进行帧内预测,但共享变换单元(TU)。
ISP的划分方式:
- 水平划分:将CU分为上下2或4个子块
- 垂直划分:将CU分为左右2或4个子块
划分数量取决于CU尺寸:
| CU尺寸 | 划分数量 | 子块最小尺寸 |
|---|---|---|
| 4×N / N×4 | 2 | 4×4 |
| 8×N / N×8 | 2或4 | 4×4 |
| ≥16×N / N×16 | 2或4 | 8×8 |
ISP的预测流程
ISP采用"串行预测"策略:
- 第一个子块使用原始参考像素进行帧内预测
- 第一个子块编码完成后,将其重建像素作为后续子块的参考
- 第二个子块使用更新后的参考像素进行预测
- 依此类推,直到所有子块预测完成
- 所有子块的残差合并后统一进行变换量化
关键优势:ISP允许大CU在不增加TU数量的前提下,获得更精细的预测,特别适合"大CU但内部纹理不一致"的场景。
ISP的压缩增益与代价
ISP在VTM中贡献约0.8-1.2% BD-rate增益,是VVC帧内预测中增益最大的工具之一。但代价也很明显:
- 每个子块需独立预测,计算量增加2-4倍
- 串行预测导致无法并行
- 划分决策增加RDO搜索空间
工程优化:
- 仅对≥8×8的CU启用ISP
- 用SATD预筛选划分方向(水平/垂直),避免双向全搜索
- 对屏幕内容(纹理均匀)跳过ISP
- VVenC中ISP耗时约占帧内编码的25%,是帧内加速的重点优化区域
CCLM跨分量线性模型:亮度指导色度
核心思想
YUV三个分量之间存在强相关性,尤其是亮度(Y)与色度(Cb/Cr)之间。CCLM(Cross-Component Linear Model)利用已重建的亮度分量,通过线性模型预测色度分量:
PredC(i,j)=α⋅RecY′(i,j)+βPredC(i,j)=α⋅RecY′(i,j)+β
其中 RecY′(i,j)RecY′(i,j) 为下采样后的重建亮度值, αα 和 ββ 为线性模型参数。
参数估计
CCLM通过已编码的相邻色度块估计 αα 和 ββ :
- 收集相邻块的亮度和色度重建值
- 选取亮度最大值和最小值对应的色度值
- 通过两点确定直线,计算 αα 和 ββ
VVC支持三种CCLM模式:
| 模式 | 参考像素来源 | 适用场景 |
|---|---|---|
| CCLM | 上方+左侧 | 通用 |
| CCLM_T | 仅上方 | 上方有更多参考像素时 |
| CCLM_L | 仅左侧 | 左侧有更多参考像素时 |
CCLM的压缩增益
CCLM在VTM中贡献约0.3-0.5% BD-rate增益,主要受益场景:
- 4:2:0色度采样(色度分辨率低,跨分量预测增益大)
- 色彩饱和度高的自然视频
- 低码率场景(色度量化严重,CCLM可有效补偿)
工程提示:CCLM的计算开销极低(仅线性运算),但需要额外的参考像素下采样。VVenC对CCLM全量启用,x266也支持但默认关闭(增益/复杂度比不够高)。
其他帧内增强工具速览
| 工具 | 功能 | 增益 | 建议 |
|---|---|---|---|
| MRL多参考行 | 使用第2/3/4行参考像素 | ~0.3% | 全场景启用 |
| 色度MIP | 色度分量也使用MIP | ~0.1% | 4:4:4内容启用 |
| 帧内色度模式推导 | 色度模式从亮度推导 | ~0.2% | 全场景启用 |
| 参考像素滤波 | 对参考像素进行平滑 | ~0.2% | 全场景启用 |
| 帧内跳过 | 跳过变换量化 | ~0.1% | 屏幕内容启用 |
VTM vs VVenC/x266:帧内预测实现对比
| 特性 | VTM(参考软件) | VVenC(工程编码器) | x266 |
|---|---|---|---|
| 方向模式 | 67种全搜索 | HAD粗选Top-8 | HAD粗选Top-4 |
| MIP | 18矩阵全搜索 | SATD预筛选Top-4 | 关闭 |
| PDPC | 全启用 | 全启用 | 全启用 |
| ISP | 全搜索2+4划分 | 仅2划分 | 关闭 |
| CCLM | 3模式全搜索 | 仅CCLM模式 | 关闭 |
| MRL | 4参考行全搜索 | Top-2参考行 | 关闭 |
| SIMD | 无 | AVX2/NEON | SSE4.2 |
| 并行策略 | 无 | CTU行并行 | CTU行并行 |
关键洞察:帧内预测是VVC中工程裁剪空间最大的模块。VVenC通过HAD粗选+MIP剪枝+ISP简化,将帧内决策耗时降低约75%,BD-rate损失仅0.3-0.5%。
实战配置模板
低延迟直播场景
bash
# VVenC参数
--preset fast
--intra-period 1 # I帧间隔
--mip 0 # 关闭MIP(降低复杂度)
--isp 0 # 关闭ISP
--pdpc 1 # 启用PDPC(开销极低)
--cclm 0 # 关闭CCLM
--mrl 1 # 启用MRL(仅2参考行)
高质量点播场景
bash
--preset slower
--intra-period 32 # I帧间隔
--mip 1 # 启用MIP
--isp 1 # 启用ISP
--pdpc 1 # 启用PDPC
--cclm 1 # 启用CCLM
--mrl 1 # 启用MRL(4参考行)
屏幕内容场景
bash
--scm 1 # 启用屏幕内容模式
--mip 1 # 启用MIP(对渐变有效)
--isp 0 # 关闭ISP(屏幕内容纹理均匀)
--pdpc 1 # 启用PDPC
--cclm 0 # 关闭CCLM(屏幕内容色度简单)
--mrl 1 # 启用MRL(文字边缘需要多参考行)
动画/卡通内容场景
bash
--mip 0 # 关闭MIP(卡通边缘锐利,MIP易模糊)
--isp 1 # 启用ISP(大块纯色区域ISP增益大)
--pdpc 1 # 启用PDPC
--cclm 1 # 启用CCLM(卡通色彩饱和度高)
--mrl 1 # 启用MRL
帧内模式快速决策:工程编码器的核心战场
三级决策框架
工程编码器通常采用三级决策框架来加速帧内模式选择:
第一级:HADAMARD粗选
对所有候选模式(67方向 + MIP + ISP)计算HADAMARD残差代价,选取Top-N进入下一级。
SATD_cost = Σ|Hadamard(residual)|
第二级:简化RDO
对Top-N模式进行简化RDO(跳过变换量化的完整流程,仅估算率失真代价),进一步筛选至Top-M。
J = D_SATD + λ × R_estimate
第三级:完整RDO
对Top-M模式进行完整的变换量化+熵编码,计算精确的率失真代价,选择最优模式。
J = D_SSD + λ × R_actual
早期终止策略
在RDO搜索过程中,若当前模式的代价已超过已知最优模式的(1+θ)倍,则提前终止当前模式的搜索:
if (current_cost > best_cost × (1 + θ)):
skip_current_mode()
θ的取值取决于预设:
| 预设 | θ值 | 加速比 | BD-rate损失 |
|---|---|---|---|
| fast | 0.3 | 3× | ~0.5% |
| medium | 0.15 | 1.8× | ~0.2% |
| slow | 0.05 | 1.2× | ~0.05% |
内容自适应决策
根据CU的局部特征动态调整搜索策略:
- 平坦区域(方差低):仅搜索Planar/DC,跳过方向和MIP
- 纹理区域(方差高):全模式搜索
- 边缘区域(梯度明显):仅搜索梯度方向附近的模式
- 小CU(≤8×8):跳过ISP和MIP(增益极小)
结语:帧内预测是空间相关性的极致挖掘
VVC的帧内预测工具箱已经从HEVC的35种模式扩展到67种方向 + MIP + ISP + PDPC + CCLM的多元体系,每一个工具都在试图更精准地捕捉图像的空间结构。但模式越多,搜索空间越大,工程取舍就越重要。
建议建立"帧内工具增益画像",针对不同内容类型(自然视频/屏幕内容/动画)、不同CU尺寸、不同QP范围,配置差异化的模式搜索策略。让编码器理解纹理,而非盲目全搜。
帧内预测是I帧压缩的灵魂,也是整个编码流水线的基石。愿每一位视频编码工程师,都能在67种方向与矩阵变换之间找到属于自己的最优预测轨迹。