☰
VVC帧间预测实战:AMVP/Merge/IBC/DMVR/PROF/GPM工程优化指南
2026/10/13 3:08:29 网站建设 项目流程

引言:帧间预测是P/B帧压缩的"引擎"

如果说帧内预测是I帧的灵魂,那么帧间预测就是P/B帧的引擎。视频序列中相邻帧之间存在极强的时间相关性,帧间预测通过运动估计找到参考帧中最佳匹配块,仅编码残差和运动信息,可将P/B帧的码率降低80-90%。

H.266/VVC在HEVC的帧间预测基础上,引入了更精细的运动信息推导机制(AMVP/Merge)、更丰富的Merge候选(MMVD/CIIP/TPM)、更精准的子块级运动补偿(GPM/PROF)、以及更智能的运动矢量细化(DMVR),使帧间编码效率较HEVC提升约10-20%。

但工具越多,运动搜索和模式决策的计算量也越大。VVC中帧间编码耗时约占总编码时间的40-50%,其中运动估计和Merge候选构建占据了绝大部分。如何在保持压缩效率的同时降低帧间决策复杂度,是工程编码器的核心挑战。

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

AMVP与Merge:运动信息推导的双轨制

核心思想

VVC中每个PU的运动信息通过两种方式之一获得:

  • AMVP:编码器通过运动估计找到最优MV,将MVP索引和MVD编码到码流中,解码端用MVP+MVD重建MV
  • Merge:编码器从候选列表中选择一个已有的运动信息(MV+参考帧索引+预测方向),仅编码Merge索引,不传MVD

关键区别:AMVP需要编码MVD(有码率开销),但MV更精确;Merge不编码MVD(零码率),但MV受限于候选列表。编码器通过RDO在两者之间选择最优方案。

Merge候选列表构建

VVC的Merge候选列表最多包含6个候选,按以下顺序构建:

  1. 空间候选:从当前PU的5个空间相邻块(A1、B1、B0、A0、B2)获取运动信息,最多取4个
  2. 时间候选:从共位PU(Collocated PU)获取时间方向的运动信息,最多取1个
  3. 历史候选:从之前已编码CU的运动信息中获取(HMVP机制),最多取5个,但总列表不超过6个
  4. 双向候选:由两个单向候选组合生成(仅B帧)
  5. 零MV候选:MV=(0,0)的兜底候选

HMVP机制:VVC引入了基于历史的MVP候选(History-based MVP),维护一个FIFO队列,存储最近编码的CU的运动信息。HMVP显著提升了Merge候选的质量,贡献约0.3-0.5% BD-rate增益。

AMVP候选列表构建

AMVP候选列表最多包含2个候选:

  1. 空间候选:从当前PU的相邻块获取MVP,优先选择与当前PU参考帧相同的相邻块
  2. 时间候选:从共位PU获取时间方向的MVP
  3. 零MVP候选:MV=(0,0)的兜底候选

工程优化:AMVP候选数量少(仅2个),但每个候选都需要进行运动估计。VVenC的优化策略:

  • 对空间候选进行去重(相同MV仅保留一个)
  • 优先搜索高质量候选(与当前PU参考帧相同的候选)
  • 对小PU(≤8×8)跳过AMVP,直接使用Merge

MMVD/CIIP/TPM:Merge模式的三大增强

MMVD:Merge模式下的运动矢量细化

MMVD(Merge Mode with Motion Vector Difference)在Merge模式的基础上,允许对选定的Merge候选进行小幅MV修正,兼具Merge的零MVD优势和AMVP的MV精度优势。

MMVD的工作流程:

  1. 从Merge列表中选择基础MV(Base MV)
  2. 从预定义的MV偏移表中选择一个偏移量(步长+方向)
  3. 将偏移量加到基础MV上,得到修正后的MV
  4. 仅编码MMVD索引(基础MV索引+步长索引+方向索引)

MV偏移表包含8个步长(1/4、1/2、1、2、4、8、16、32像素)和4个方向(上/下/左/右),共32种偏移组合。

压缩增益:MMVD贡献约0.3-0.5% BD-rate增益,主要受益场景:

  • 小幅运动(摄像机抖动、物体微动)
  • 低码率场景(MVD码率开销大,MMVD的索引编码更高效)
  • 小PU(运动估计精度受限,MMVD可提供亚像素级修正)

工程实现:MMVD的32种偏移组合需要逐一进行RDO搜索,计算量较大。VVenC的优化策略:

  • 仅对Merge列表前2个候选启用MMVD
  • 对小步长(≤1像素)进行SATD预筛选
  • 对大PU(≥32×32)跳过MMVD(增益极小)

CIIP:帧内帧间融合预测

CIIP(Combined Inter and Intra Prediction)对PU同时使用帧间预测和帧内预测,将两者加权融合:

PCIIP=w⋅Pinter+(1−w)⋅PintraPCIIP​=w⋅Pinter​+(1−w)⋅Pintra​

其中 PinterPinter​ 为帧间预测值, PintraPintra​ 为帧内预测值(使用Planar模式), ww 为融合权重。

CIIP的工作流程:

  1. 从Merge列表中选择运动信息,生成帧间预测 PinterPinter​
  2. 使用Planar模式进行帧内预测,生成 PintraPintra​
  3. 根据PU与相邻块的编码模式关系,选择融合权重 ww :
    • 相邻块均为帧间模式: w=1/4w=1/4 (偏帧间)
    • 相邻块均为帧内模式: w=3/4w=3/4 (偏帧内)
    • 其他情况: w=1/2w=1/2 (等权融合)

压缩增益:CIIP贡献约0.2-0.4% BD-rate增益,主要受益场景:

  • 遮挡区域(帧间预测失效,帧内预测可补偿)
  • 物体边缘(帧间块效应明显,帧内平滑可改善)
  • 低码率场景(帧内预测的平滑效果更显著)

工程实现:CIIP需要额外进行帧内预测,计算开销中等。VVenC对CIIP全量启用,x266默认关闭(增益/复杂度比不够高)。

TPM:三角形划分模式

TPM(Triangle Partition Mode)将CU沿对角线划分为两个三角形区域,每个三角形独立使用不同的Merge候选进行帧间预测,然后在边界处进行自适应加权融合。

TPM的工作流程:

  1. 选择划分方向(对角线或反对角线)
  2. 为两个三角形区域分别从Merge列表中选择运动信息
  3. 对两个三角形区域分别进行运动补偿
  4. 在三角形边界处进行加权融合(权重从边界向两侧衰减)

压缩增益:TPM贡献约0.3-0.5% BD-rate增益,主要受益场景:

  • 物体边界(两个物体沿对角线分隔)
  • 旋转运动(不同区域运动方向不一致)
  • 中等码率场景

工程实现:TPM的搜索空间较大(2种划分方向 × Merge候选组合)。VVenC的优化策略:

  • 仅对≥8×8的CU启用TPM
  • 用SATD预筛选划分方向
  • 对每个三角形仅搜索Merge列表前4个候选

GPM:广义双向预测

核心思想

GPM(Generalized Bi-Prediction)是HEVC中双向预测的扩展。HEVC的双向预测对L0和L1参考帧的预测值进行等权平均,而GPM允许对两个双向预测候选进行加权融合,权重由编码器通过RDO选择。

GPM的工作流程:

  1. 从Merge列表中选择两个不同的双向预测候选
  2. 对两个候选的预测值进行加权融合:

PGPM=w⋅P1+(1−w)⋅P2PGPM​=w⋅P1​+(1−w)⋅P2​

  1. 权重 ww 从预定义的权重表中选择(共64种权重组合)

与TPM的区别:TPM是空间划分(不同区域用不同MV),GPM是全CU加权融合(整个CU用两个MV的加权和)。两者可以组合使用。

压缩增益

GPM贡献约0.2-0.4% BD-rate增益,主要受益场景:

  • 光照变化(两个参考帧亮度不一致,加权可补偿)
  • 半透明物体(两个参考帧的内容混合)
  • 中等码率场景

工程实现:GPM的64种权重组合需要逐一进行RDO搜索,计算量较大。VVenC的优化策略:

  • 仅对双向预测PU启用GPM
  • 用SATD预筛选Top-8权重组合
  • 对大PU(≥32×32)跳过GPM

IBC:屏幕内容的"帧内帧间"

核心思想

IBC(Intra Block Copy)是一种特殊的帧间预测模式,参考帧不是时间上的前一帧,而是当前帧中已重建的区域。IBC本质上是在当前帧内进行"块复制",特别适合屏幕内容中大量重复的文本、图标、UI元素。

IBC的工作流程:

  1. 在当前CTU左侧和上方的已重建区域中搜索最佳匹配块
  2. 将匹配块的位置编码为块矢量(BV)
  3. 用匹配块作为预测值,仅编码残差

关键特性:IBC在码流中被标记为帧间模式(使用Merge/AMVP机制),但参考帧是当前帧,因此被称为"帧内帧间"。

压缩增益

IBC对屏幕内容贡献约3-5% BD-rate增益,是屏幕内容编码中增益最大的工具之一。但对自然视频增益极小(<0.1%),因此通常仅在屏幕内容模式下启用。

工程实现:IBC的运动搜索范围受限于当前CTU的左侧和上方区域(通常限制为当前CTU左侧2个CTU宽度的区域)。VVenC的优化策略:

  • 使用哈希匹配加速搜索(对4×4子块预计算哈希值)
  • 对自然视频自动关闭IBC
  • BV编码使用与AMVP相同的MVD机制

DMVR:解码端运动矢量细化

核心思想

DMVR(Decoder-side Motion Vector Refinement)允许解码端对双向预测的MV进行小幅修正,无需编码器传输额外的MVD信息。编码器在编码时假设解码端会进行DMVR细化,因此编码器端的RDO也使用细化后的MV计算率失真代价。

DMVR的工作流程(解码端):

  1. 对双向预测PU,从初始MV出发
  2. 在初始MV周围搜索25个点(5×5网格,步长1像素)
  3. 对每个搜索点,计算L0和L1预测块之间的匹配代价(SAD)
  4. 选择匹配代价最小的点作为细化后的MV
  5. 用细化后的MV进行双向预测

关键特性:DMVR在解码端执行,不增加码率开销,但提升预测精度。

压缩增益

DMVR贡献约0.3-0.5% BD-rate增益,主要受益场景:

  • 双向预测PU
  • 中等码率场景
  • 运动复杂的区域

工程挑战:DMVR在解码端执行,增加了计算复杂度。VVenC的优化策略:

  • 仅对≥8×8的双向预测PU启用DMVR
  • 对平坦区域跳过DMVR(增益极小)
  • 用SIMD加速SAD计算

PROF:子块级双向光流

核心思想

PROF(Prediction Refinement with Optical Flow)在双向预测的基础上,使用光流模型对预测值进行子块级修正,补偿局部运动的不一致性。

PROF的工作流程:

  1. 对双向预测PU,将CU划分为4×4子块
  2. 对每个子块,计算L0和L1预测值之间的光流修正量:

ΔP=∂P∂x⋅Δvx+∂P∂y⋅ΔvyΔP=∂x∂P​⋅Δvx+∂y∂P​⋅Δvy

其中 ∂P∂x∂x∂P​ 和 ∂P∂y∂y∂P​ 为预测值的梯度, ΔvxΔvx 和 ΔvyΔvy 为L0和L1 MV的差值
3. 将修正量加到双向预测值上

关键特性:PROF对双向预测的预测值进行后处理修正,不改变MV本身,因此解码端可以独立执行。

压缩增益

PROF贡献约0.2-0.3% BD-rate增益,主要受益场景:

  • 旋转运动(子块级运动不一致)
  • 形变运动(物体局部运动差异大)
  • 高码率场景

工程实现:PROF涉及梯度计算和光流修正,计算开销中等。VVenC对PROF全量启用,x266默认关闭。

运动估计加速策略

分层搜索

运动估计是帧间编码中最耗时的操作。VVC采用分层搜索策略:

  1. 整数像素搜索:使用菱形搜索或六边形搜索,在整数像素精度下找到最佳匹配
  2. 半像素搜索:在整数像素最佳点周围进行半像素精度的搜索
  3. 四分之一像素搜索:在半像素最佳点周围进行1/4像素精度的搜索

工程优化:VVenC使用改进的钻石搜索(Diamond Search),将搜索点数从HEVC的9个减少到5-7个,加速比约1.5×。

早期终止

在运动搜索过程中,若当前搜索点的代价已超过已知最优代价的(1+θ)倍,则提前终止搜索:

if (current_SAD > best_SAD × (1 + θ)): skip_remaining_search()

θ的取值取决于预设:

预设θ值加速比BD-rate损失
fast0.53×~0.5%
medium0.21.8×~0.2%
slow0.051.2×~0.05%

内容自适应搜索范围

根据PU的运动特征动态调整搜索范围:

  • 小运动(相邻块MV小):缩小搜索范围(±16像素)
  • 大运动(相邻块MV大):扩大搜索范围(±128像素)
  • 平坦区域(方差低):跳过运动估计,直接使用零MV
  • 纹理区域(方差高):全范围搜索

VTM vs VVenC/x266:帧间预测实现对比

特性VTM(参考软件)VVenC(工程编码器)x266
AMVP全候选搜索空间候选去重简化候选列表
Merge6候选全搜索HMVP+FIFO优化4候选简化
MMVD32偏移全搜索Top-2候选+预筛选关闭
CIIP全启用全启用关闭
TPM全搜索SATD预筛选关闭
GPM64权重全搜索Top-8预筛选关闭
IBC全范围搜索哈希加速+CTU限制关闭
DMVR全启用≥8×8启用关闭
PROF全启用全启用关闭
SIMD无AVX2/NEONSSE4.2
并行策略无CTU行并行+WPPCTU行并行

关键洞察:帧间预测是VVC中工程裁剪空间最大的模块之一。VVenC通过候选预筛选+早期终止+SIMD加速,将帧间编码耗时降低约60%,BD-rate损失仅0.3-0.5%。

实战配置模板

低延迟直播场景

# VVenC参数 --preset fast --qp 32 # 目标码率 --mmvd 0 # 关闭MMVD(降低复杂度) --ciip 0 # 关闭CIIP --tpm 0 # 关闭TPM --gpm 0 # 关闭GPM --dmvr 0 # 关闭DMVR(解码端开销) --prof 0 # 关闭PROF --ibc 0 # 关闭IBC(自然视频) --hme 1 # 启用分层运动估计加速

高质量点播场景

--preset slower --qp 22 # 目标码率 --mmvd 1 # 启用MMVD --ciip 1 # 启用CIIP --tpm 1 # 启用TPM --gpm 1 # 启用GPM --dmvr 1 # 启用DMVR --prof 1 # 启用PROF --ibc 0 # 关闭IBC(自然视频) --hme 1 # 启用分层运动估计

屏幕内容场景

--scm 1 # 启用屏幕内容模式 --mmvd 1 # 启用MMVD --ciip 0 # 关闭CIIP(屏幕内容帧内已足够好) --tpm 0 # 关闭TPM(屏幕内容运动简单) --gpm 0 # 关闭GPM --dmvr 0 # 关闭DMVR --prof 0 # 关闭PROF --ibc 1 # 启用IBC(屏幕内容核心工具) --hme 0 # 关闭分层运动估计(IBC需要精确搜索)

动画/卡通内容场景

--mmvd 1 # 启用MMVD --ciip 1 # 启用CIIP(卡通边缘需要帧内补偿) --tpm 1 # 启用TPM(卡通物体边界清晰) --gpm 0 # 关闭GPM(卡通色彩均匀,双向加权增益小) --dmvr 1 # 启用DMVR --prof 0 # 关闭PROF(卡通运动刚性,光流增益小) --ibc 0 # 关闭IBC

帧间模式快速决策:工程编码器的核心战场

四级决策框架

工程编码器通常采用四级决策框架来加速帧间模式选择:

第一级:快速Skip/Direct检测

对每个PU,先检测是否可以直接使用Skip或Direct模式:

  • 若相邻块均为Skip模式,且当前PU残差极小,则直接使用Skip
  • 若当前PU为双向预测且MV接近零,则使用Direct

加速效果:约30%的PU可直接跳过后续搜索。

第二级:Merge候选快速筛选

对Merge候选列表进行SATD预筛选,仅对Top-3候选进行完整RDO:

SATD_cost = Σ|Hadamard(residual)|
第三级:AMVP快速运动估计

对AMVP模式,使用简化运动估计(缩小搜索范围+早期终止),仅当AMVP代价优于Merge时才进行完整运动估计。

第四级:增强模式条件启用

对MMVD/CIIP/TPM/GPM等增强模式,仅在基础模式代价较低时启用:

if (best_merge_cost < threshold): enable_MMVD/CIIP/TPM/GPM()

内容自适应决策

根据PU的局部特征动态调整搜索策略:

  • 平坦区域(方差低):仅使用Merge Skip,跳过运动估计
  • 纹理区域(方差高):全模式搜索
  • 运动区域(相邻块MV大):扩大搜索范围,启用MMVD/DMVR
  • 静止区域(相邻块MV小):缩小搜索范围,跳过增强模式

结语:帧间预测是时间相关性的极致挖掘

VVC的帧间预测工具箱已经从HEVC的AMVP/Merge扩展到AMVP/Merge + MMVD/CIIP/TPM/GPM + IBC + DMVR/PROF的多元体系,每一个工具都在试图更精准地捕捉视频的时间结构和运动规律。但工具越多,搜索空间越大,工程取舍就越重要。

建议建立"帧间工具增益画像",针对不同内容类型(自然视频/屏幕内容/动画)、不同PU尺寸、不同QP范围,配置差异化的模式搜索策略。让编码器理解运动,而非盲目全搜。

帧间预测是P/B帧压缩的引擎,也是整个编码流水线的核心。愿每一位视频编码工程师,都能在运动矢量与光流修正之间找到

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询