VVC帧间预测革新:仿射运动补偿与双向光流技术实战

引言:帧间预测是压缩效率的"主力引擎"

视频序列中相邻帧之间存在大量时间冗余,帧间预测通过运动估计与运动补偿,用参考帧预测当前帧,仅编码残差信息,是视频压缩中增益最大的模块。

H.266/VVC在HEVC的基础上,对帧间预测进行了多项革新:引入仿射运动补偿 处理旋转、缩放等复杂运动,引入双向光流(BDOF) 细化双向预测,增强几何划分模式(GPM) ,使帧间预测环节较HEVC提升约4-6% BD-rate增益。

但仿射运动补偿的计算复杂度远高于传统平移模型,BDOF的逐像素光流计算也带来显著开销。如何在预测精度与编码速度之间取得平衡,是工程落地的核心挑战。

本文从算法原理到工程实践,系统梳理VVC帧间预测的关键技术,并给出可复用的优化策略与配置模板。

仿射运动补偿

核心思想

HEVC的运动补偿仅支持平移模型------一个CU内所有像素使用相同的运动矢量。但实际视频中常出现旋转、缩放、剪切等复杂运动(如摄像机转动、物体旋转),平移模型无法准确描述。

VVC引入仿射运动补偿,用仿射变换模型描述CU内的运动场:

复制代码
vx = a × x + b × y + c
vy = d × x + e × y + f

其中 (x, y) 为像素坐标,(vx, vy) 为该像素的运动矢量,a~f 为仿射参数。

4参数与6参数模型

VVC支持两种仿射模型:

模型 参数数量 自由度 适用场景
4参数 4 平移+旋转+缩放 简单旋转/缩放
6参数 6 平移+旋转+缩放+剪切 复杂运动

4参数模型(简化仿射):

复制代码
vx = a × x - b × y + c
vy = b × x + a × y + d

仅需2个控制点的运动矢量即可推导全部参数。

6参数模型(完整仿射):

复制代码
vx = a × x + b × y + c
vy = d × x + e × y + f

需要3个控制点的运动矢量。

控制点运动矢量

仿射CU的运动矢量由**控制点运动矢量(CPMV)**推导:

  • 4参数模型:使用左上角(CP0)和右上角(CP1)两个控制点
  • 6参数模型:使用左上角(CP0)、右上角(CP1)、左下角(CP2)三个控制点

CPMV推导流程:

  1. 对每个控制点进行运动估计,得到CPMV
  2. 根据CPMV计算仿射参数 a~f
  3. 对CU内每个4×4子块,根据像素坐标计算子块运动矢量

子块划分

仿射CU被划分为4×4子块,每个子块使用独立的运动矢量进行运动补偿:

复制代码
子块MV(x, y) = 仿射变换(子块中心坐标)

子块大小:VVC固定使用4×4子块,HEVC中AMVP的子块大小可变。

运动矢量精度 :仿射子块MV使用1/16像素精度(高于传统MV的1/4像素精度),需要更精细的插值滤波。

仿射合并模式

VVC引入仿射合并模式,从相邻块继承仿射运动信息:

  • 仿射Merge:从空间/时间相邻块继承CPMV
  • 仿射AMVP:构建CPMV候选列表,编码器选择最优

候选列表构建:

  1. 检查空间相邻块(左、上、右上、左下、左上)
  2. 检查时间相邻块(同位置Col块)
  3. 构造CPMV组合候选
  4. 最多保留N个候选(VVC中通常为5-6个)

压缩增益与复杂度

  • 压缩增益:仿射运动补偿可使整体码率降低约2-3%,对旋转/缩放场景增益更大(5-8%)
  • 复杂度:仿射模式需要多控制点运动估计和逐子块运动补偿,占编码总耗时约10-15%

工程实践:VVenC默认启用仿射模式,对低复杂度场景可以关闭。

双向光流

核心思想

双向预测(Bi-prediction)使用两个参考帧(前向和后向)的平均值作为预测值。但简单平均假设物体在两个参考帧之间做匀速直线运动,实际运动中可能存在加速度或非刚性形变。

**双向光流(Bidirectional Optical Flow, BDOF)**通过逐像素光流计算,细化双向预测值,使预测更贴合真实运动。

算法流程

BDOF的处理流程:

1. 初始双向预测

对当前CU,使用传统双向预测得到两个参考块 pred0 和 pred1。

2. 光流计算

对每个4×4子块,计算光流位移 (vx, vy):

复制代码
vx = - (∂I/∂x) × Δt / (∂I/∂t)
vy = - (∂I/∂y) × Δt / (∂I/∂t)

其中 ∂I/∂x、∂I/∂y 为空间梯度,∂I/∂t 为时间梯度,Δt 为时间间隔。

3. 预测细化

根据光流位移,对 pred0 和 pred1 进行亚像素偏移,得到细化后的预测值:

复制代码
pred_bdoF = (pred0(x+vx, y+vy) + pred1(x-vx, y-vy)) / 2

4. 平滑约束

对光流位移施加平滑约束,避免噪声干扰。

启用条件

BDOF并非对所有CU启用,需满足以下条件:

  • CU使用双向预测
  • 两个参考帧分别在当前帧的前后
  • CU尺寸不小于8×8
  • 未使用加权预测
  • 编码器RDO决策认为BDOF增益大于开销

压缩增益与复杂度

  • 压缩增益:BDOF可使整体码率降低约0.5-1%,对复杂运动场景增益更大
  • 复杂度:BDOF需要逐子块计算梯度与光流,占编码总耗时约3-5%

工程实践:VVenC默认启用BDOF,对实时编码场景可以关闭。

其他帧间预测增强

几何划分模式

VVC增强了几何划分模式(GPM),支持将CU按任意角度划分为两个三角形区域,每个区域独立进行运动补偿。

增益:GPM对物体边界处的运动不连续场景增益明显,整体码率降低约0.5-1%。

改进的TMVP

VVC改进了时域运动矢量预测(TMVP),使用更灵活的时间候选位置,提高运动矢量预测精度。

运动矢量分辨率自适应

VVC支持自适应运动矢量分辨率(AMVR),根据CU特性选择MV精度:

  • 1/4像素:默认精度
  • 1像素:对大运动场景减少信令开销
  • 整数像素:对屏幕内容等场景

实战配置模板

高质量编码场景

bash 复制代码
# VVenC参数
--preset slower
--affine 1                # 启用仿射运动补偿
--bdof 1                  # 启用双向光流
--gpm 1                   # 启用几何划分模式
--amvr 1                  # 启用自适应MV分辨率
--max-affine-merge 5      # 仿射合并候选数

实时编码场景

bash 复制代码
--preset fast
--affine 0                # 关闭仿射(节省计算)
--bdof 0                  # 关闭BDOF
--gpm 1                   # 保留GPM(增益/开销比高)
--amvr 1                  # 启用AMVR

屏幕内容编码场景

bash 复制代码
--preset slower
--affine 0                # 屏幕内容中仿射增益有限
--bdoF 0                  # 关闭BDOF
--gpm 1                   # 启用GPM
--amvr 2                  # 使用整数MV精度
--screen-content 1        # 启用屏幕内容优化

低复杂度场景

bash 复制代码
--preset faster
--affine 0                # 关闭仿射
--bdoF 0                  # 关闭BDOF
--gpm 0                   # 关闭GPM
--amvr 0                  # 使用默认MV精度

帧间预测的工程优化

仿射模式快速决策

VVenC使用多级快速决策策略:

  1. 预筛选:对平坦区域跳过仿射模式
  2. 早期终止:当传统Merge模式RD代价足够小时,跳过仿射搜索
  3. 候选裁剪:限制仿射合并候选数量
  4. 子块MV缓存:缓存已计算的子块MV,避免重复计算

加速效果:该策略可将仿射编码耗时降低约50-60%,压缩损失小于0.2%。

BDOF快速算法

VVenC对BDOF使用以下优化:

  1. CU尺寸阈值:仅对大于16×16的CU启用BDOF
  2. 梯度预筛选:对梯度较小的区域跳过BDOF
  3. SIMD加速:使用AVX2指令加速梯度计算与光流求解

加速效果:BDOF耗时降低约40%,压缩损失可忽略。

运动估计加速

VVenC使用以下策略加速运动估计:

  1. 分层搜索:从粗到细的多层搜索策略
  2. TZ搜索:三元组搜索算法,快速收敛
  3. MV预测:利用相邻块MV作为搜索起点
  4. 参考帧选择:根据QP自适应选择参考帧数量

结语:帧间预测是压缩效率的主力引擎

VVC的帧间预测已经从HEVC的平移模型,演进为仿射运动补偿+BDOF+GPM的多元体系。仿射模型能准确描述旋转、缩放等复杂运动,BDOF能细化双向预测,GPM能灵活划分物体边界。

但仿射和BDOF的计算复杂度显著增加,工程取舍变得尤为重要。建议在高质量编码场景中启用所有帧间预测工具,在实时编码场景中优先保留GPM和AMVR,关闭仿射和BDOF。

帧间预测是压缩效率的主力引擎,也是提升压缩比最直接的手段。愿每一位视频编码工程师,都能在仿射、BDOF与GPM之间找到预测精度与编码速度的最佳平衡点。

相关推荐
the3clipse1 天前
VVC熵编码与码率控制:CABAC革新与λ域RDO工程实战
上下文建模·码率控制·vvenc·cabac·r-λ模型·vvc熵编码·λ域rdo
DogDaoDao2 个月前
H.266/VVC 双雄对决:VTM vs VVenC 深度对比分析
音视频·视频编解码·vvc·vtm·h.266·视频压缩·vvenc
DogDaoDao2 年前
视频编码器的抉择:x264、x265、libaom、vvenc 对比测试实验
音视频·视频编解码·x264·x265·h266·libaom·vvenc
DogDaoDao2 年前
H266/VVC 量化编码中量化矩阵 QM 技术
音视频·视频编解码·h266·vvc·量化编码·vvenc·量化矩阵 qm
DogDaoDao2 年前
H266/VVC 帧内预测中 ISP 技术
视频编解码·isp·h266·vvc·vtm·帧内预测·vvenc
DogDaoDao2 年前
VVenC 编码器源码结构与接口函数介绍
音视频·实时音视频·视频编解码·h266·vvc·vtm·vvenc
DogDaoDao2 年前
Mac 环境 VVenC 编译与编码命令行工具使用教程
音视频·mac·视频编解码·h266·vvc·vtm·vvenc