从HEVC到VVC:帧间预测的“内卷”之路,Merge模式、Affine运动补偿都升级了啥?
H.266/VVC帧间预测技术深度解析:从Merge模式到仿射运动的全面进化
当4K/8K超高清视频成为主流,VR/AR应用爆发式增长,传统视频编码标准HEVC逐渐显露出性能瓶颈。H.266/VVC(Versatile Video Coding)作为新一代国际视频编码标准,在帧间预测领域引入十余项创新技术,将压缩效率提升40%以上。本文将深入剖析这些技术革新如何重塑视频编码的底层逻辑。
1. 帧间预测基础与VVC的突破方向
视频编码的本质是消除冗余——空间冗余、时间冗余和统计冗余。帧间预测专门解决时间冗余问题,其核心思想是"用运动矢量讲述像素位移的故事"。在HEVC时代,1/4像素精度的运动估计和基于平移的运动模型已经达到性能天花板,VVC通过三个维度实现突破:
- 运动表示精细化:从1/4像素到1/16像素精度,MV预测候选列表从5个扩展到6个
- 运动模型多元化:引入仿射运动补偿,支持旋转、缩放等复杂运动
- 预测方式智能化:融合帧内/帧间预测(CIIP)、几何划分(GPM)等混合技术
实验数据显示,在相同画质下,VVC的帧间预测技术相比HEVC平均减少34.7%的码率,其中Merge模式改进贡献约15%,仿射运动补偿贡献约12%。
2. Merge模式的全面升级策略
2.1 扩展Merge候选列表构造
VVC的Merge列表构造如同精心设计的"运动信息智库",通过四级递进策略确保候选质量:
- 空间候选(最多4个):采集左侧(A0)、上方(B0)、右上(B2)、左下(A1)四个邻域块的运动信息
- 时间候选(1个):从同位参考帧中提取运动矢量,采用时域运动一致性假设
- 历史候选(动态数量):记录最近使用的运动信息,形成"运动记忆库"
- 合成候选(1个):对前两个候选进行加权平均,生成新的预测向量
// VTM参考代码中的Merge列表构造逻辑 void PU::getInterMergeCandidates(...) { // 空间候选收集 addSpatialMergeCandidates(pu, mergeCandList, candIdx); // 时域候选插入 if (candIdx < maxNumMergeCand) addTemporalMergeCandidate(pu, mergeCandList, candIdx); // 历史候选补充 while (candIdx < maxNumMergeCand) addHistoryMergeCandidate(mergeCandList, candIdx); // 合成候选生成 if (candIdx == 1 && mergeCandList.size() >= 2) addPairwiseAvgCandidate(mergeCandList); }2.2 Merge with MVD技术详解
传统Merge模式如同"单选题",只能选择现有候选;而Merge with MVD则升级为"填空题",允许在选定候选基础上进行局部调整。其技术实现包含三个关键设计:
- 搜索模式:在初始MV周围定义64个搜索点(8步长×4方向×2坐标轴)
- 精度控制:最小步长达1/4像素,最大可覆盖32像素范围
- 信令机制:仅需传输方向索引(2bit)和步长索引(3bit)
下表对比不同场景下的技术选择策略:
| 场景特征 | 推荐模式 | 性能增益 | 复杂度增加 |
|---|---|---|---|
| 静态背景 | 常规Merge | 0.5-1.2% | 可忽略 |
| 匀速运动 | Merge with MVD | 2.1-3.8% | 15-20% |
| 复杂运动 | 仿射Merge | 4.5-6.7% | 35-50% |
3. 仿射运动补偿的技术实现
3.1 四参数与六参数模型对比
VVC的仿射运动模型如同给视频块配备"变形控制器",两种模型适应不同运动场景:
- 四参数模型:描述平移、旋转、缩放
mv_x = a*x + b*y + e mv_y = -b*x + a*y + f - 六参数模型:增加倾斜变换
mv_x = a*x + b*y + e mv_y = c*x + d*y + f
控制点布置策略直接影响性能:
- 4参数:左上角+右上角(水平基线)
- 6参数:增加左下角形成三角参考系
3.2 仿射Merge的候选生成
仿射Merge列表构造是精度与复杂度的平衡艺术,其候选来源包括:
- 继承候选:直接复用相邻仿射编码块参数
- 构造候选:将平移MV转换为仿射参数
# 平移MV转换为四参数示例 def convert_to_affine(mv_left, mv_right): a = (mv_right.x - mv_left.x) / block_width b = (mv_right.y - mv_left.y) / block_width e = mv_left.x f = mv_left.y return AffineParams(a, b, e, f) - 时域候选:从同位参考帧提取仿射参数
4. 混合预测技术与后处理优化
4.1 几何划分模式(GPM)的创新设计
GPM技术如同"智能剪刀",将CU沿对角线分割为两个不规则区域,每个区域采用独立运动矢量。其技术亮点包括:
- 分割角度:定义64种离散角度(0-180度)
- 融合矩阵:采用7×7整数权重矩阵实现平滑过渡
- 运动约束:每个分区仅允许单向预测,避免双向预测冲突
4.2 解码端运动优化技术对比
VVC引入三类后处理技术形成"预测质量提升流水线":
| 技术 | 处理粒度 | 主要作用 | 适用条件 |
|---|---|---|---|
| DMVR | 8×8块 | MV精确修正 | 双向预测Merge模式 |
| BDOF | 4×4块 | 像素级补偿 | 特定POC关系 |
| PROF | 4×4子块 | 仿射预测细化 | 仿射模式 |
// BDOF核心算法伪代码 void applyBDOF(CU& cu) { for (each 4x4 subblock) { computeGradient(prev, curr, Ix, Iy, It); vx = -sum(Ix*It)/sum(Ix*Ix); vy = -sum(Iy*It)/sum(Iy*Iy); adjustPixels(prev, curr, vx, vy); } }5. 编码器实现与优化策略
5.1 VTM中的快速算法设计
面对爆炸式增长的计算复杂度,VVC采用多层级的快速决策机制:
- 早期终止:基于RD-cost阈值提前跳过非优模式
- 候选筛选:使用SAD代替SATD进行初选
- 并行处理:Wavefront并行处理CTU行
5.2 运动估计的精度-效率权衡
1/16像素精度带来显著性能提升,但也大幅增加计算负担。实际编码采用分级策略:
- 整数像素阶段:TZSearch快速定位
- 分像素阶段:Diamond搜索+抛物线拟合
- 光流修正:仅对高价值块启用
在8K视频编码实测中,这种策略可减少75%的运动估计时间,仅损失0.8%的压缩效率。
