4.2 运动矢量编码优化


4.2 运动矢量编码优化

本节摘要:运动矢量(MV)是帧间预测里最贵的"话"——每个帧间块都要交代"我从哪搬的"。VVC在MV信令上动了两类手术:一是把Merge家族扩容(时空域候选、历史候选、成对平均候选),让"抄邻居"能覆盖更多块;二是发明MMVD与SMVD两种"从Merge起点再走一小步"的省比特姿态。本节的核心议题:预测子体系如何让MV从"绝对坐标"退化为"很小的差值"。

承接4.1:仿射解决了"运动怎么描述",本节解决"描述怎么便宜地写进码流"。4.3节将继续把这套信令与解码端细化组合起来。

MV为什么贵:一笔算术

一个直觉算术(数量级示意):1080p视频里,若每个16×16块都要一个MV,一帧有上千个块;MV用绝对像素坐标编码要十几比特,帧率一乘,光MV就能吃掉可观码率。而多数时候邻居们的MV高度相似——背景整体移动时,整片块的MV几乎相同。

所有标准的答案都一样:不传MV本身,传"预测子+差值"。预测子是从邻域推导的"猜测MV",差值是真实MV与猜测的差。猜测越准,差值越小,比特越省。VVC在这条线上把"猜测"做到了新高度。

AMVP:老将,先讲清楚

**高级运动矢量预测(AMVP)**是H.264时代MV竞争机制的升级版:编码器从空域邻居(左、上)与时域同位块收集候选,挑一个作为预测子,码流里传"预测子索引+MVD(MV差)"。MVD再经CABAC(第5.3节)压得很小。适用场景:块的运动与邻居不同、需要"精确控制MV"的时候。

Merge家族:能抄就不写

Merge模式更激进:直接抄某个候选的全套运动信息(MV、参考帧索引、双向结构),码流里只传候选索引,几个比特搞定。Skip是Merge的极端版——连残差都声明为零。背景块、静止画面几乎全是Skip/Merge的天下。

VVC把Merge候选列表从HEVC的规模明显扩容,新增三类候选:

候选类型 来源 直觉
时空域候选 空域邻居+时域同位块(HEVC已有) 邻居怎么动我大概也怎么动
历史候选HMVP 此前编码块的运动信息FIFO队列 运动有惯性,历史会重演
成对平均候选 前两个候选的平均 模糊匹配的中间答案
组合双向候选 前向列表取一个+后向列表取一个拼双预测 双向参考的廉价组合

候选列表扩到六席左右,"抄得到"的覆盖率大增——Merge命中率每提高一截,MV信令比特就整片消失。

MMVD:从Merge起点"再走一小步"

纯Merge抄来的MV毕竟不是为本块量身定做的,有时差一口气。**MMVD(带运动矢量差的Merge,Merge with Motion Vector Difference)**在两者之间走了第三条路:以某个Merge候选为起点,沿选定的方向(上下左右八方向之一)、走选定的步长(几档距离),得到最终MV。

信令只需:Merge候选起点+方向索引+距离档位——三个极小的字段,表达能力却覆盖"起点附近的小范围精修"。典型场景:缓慢漂移的水面、呼吸般的微幅晃动、光流场的小扰动。这类运动以前要么忍受Merge的偏差(残差变大),要么升级成AMVP写完整MVD(信令变贵),MMVD恰好填中間地带。

MMVD 的搜索姿态(示意): 步长2 步长1 起点 步长1 步长2 上 · · ◉ · · 下 · · ◉ · · 左 · · ◉──◉──◉ · · 右 · · ◉──◉──◉ · · ◉ = Merge候选起点(抄来的MV) · = MMVD可达的位置(方向+距离档位索引即可表达) 对比: AMVP:传完整MVD,任意精度,比特多 Merge:只传候选索引,零差值,精度受限 MMVD:起点索引+方向+档位,小步精修,比特极少

SMVD:双向镜像的对称差值

**对称MVD(Symmetric MVD)**瞄准双向预测块:前后向两个MV本就强相关(运动连续时两者近似镜像)。SMVD只传一个方向的MVD,另一方向的MV由"当前帧位置居中镜像"规则推导。镜头匀速运动、物体线性移动的内容里,这个假设命中率高,双向MV的比特几乎省掉一半。与它相对的还有隐式推导参考帧等信令瘦身手段,思路一脉相承:码流里凡是能从物理规律推导的,一个比特都不传

编码器视角:一场三级决策

把本节工具放回编码器的决策流水线,每个帧间CU依次问三个问题:

  1. 能不能整块抄?——Merge/Skip候选试一遍,RD代价最低就直接收工(背景块大多到此为止);
  2. 抄来的差一口气的,值得小修吗?——MMVD八个方向几档步长扫一遍;
  3. 必须精确控制吗?——上AMVP,写预测子索引+MVD,必要时上仿射(4.1节)控制点。

这个漏斗把绝大多数块挡在前两关,真正昂贵的完整信令只留给少数运动复杂的块。帧间信令的效率,本质是漏斗的过滤效率

💡 一个容易忽略的事实:Merge候选列表的构建规则在标准里是规定死的(解码端必须逐比特复现同样的列表),所以"抄邻居"看似编码器的自由决策,实则两端共演的一场默剧——编码器选哪个候选、解码器怎么重建列表,全是标准文本写死的剧本。这也是VVC实现一致性测试(第10.1节)的重点科目。

一问一答

问:Merge候选列表的构建规则为什么要在标准里写死?
因为解码端必须独立重建出与编码端完全相同的候选列表(码流里传的只是"选第几个")。构建规则写死,两端才能各建各的列表、索引一一对上——"抄邻居"才能零歧义。这也带来一个工程事实:候选列表构建是无声的高发错位点(邻域可用性判断、时域缩放、去重顺序任何一处实现偏差都导致整段漂移),解码对齐测试必须覆盖它,本节与第10.1节的提醒在此合流。

本节要点回顾

  • MV信令的公式是"预测子+差值":猜测越准差值越小,所有优化都在打磨"猜测";
  • Merge家族扩容:历史候选、成对平均、组合双向,让"整块抄"覆盖更多块;
  • MMVD填中间地带:Merge起点+方向+档位,小步精修几乎不花比特;
  • SMVD吃物理规律:双向镜像推导,匀速运动内容省一半双向MV比特;
  • 三级漏斗是效率本质:抄得到就抄,差一口气就小修,逼不得已才写全量。

作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U