You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

四分之一精度运动矢量编码及非整精度数值转换技术问询

非整数精度运动矢量的编码/解码逻辑

嘿,这个问题在视频编码开发里太常见了,我给你把核心逻辑拆解清楚——本质就是用缩放因子把浮点运动矢量转成整数存储,解码时再逆操作还原,不同精度对应不同的缩放因子:

1. Quarter Pel(1/4像素精度)

这个是H.264等标准里常用的精度,对应的缩放因子是 4(相当于把单个像素拆成4×4的小格子):

  • 实际值转代码整数:直接把实际的浮点MV乘以4,结果刚好是整数(因为1/4精度下,实际值的小数部分只能是0、0.25、0.5、0.75)
    比如你举的例子:(3.5, 2.75)
    • x分量:3.5 × 4 = 14
    • y分量:2.75 × 4 = 11
      所以代码里会用整数对 (14, 11) 来表示这个运动矢量
  • 代码整数转实际值:把整数MV除以4就行
    比如你提到的代码里的(114, 82):
    • x分量:114 ÷ 4 = 28.5
    • y分量:82 ÷ 4 = 20.5
      对应的实际运动矢量就是 (28.5, 20.5)

2. 1/16 Pel(1/16像素精度)

更高精度的场景会用到这个,缩放因子是 16(单个像素拆成16×16的小格子):

  • 实际值转代码整数:整数MV = 实际MV值 × 16
    比如实际值是(1.375, -2.5):
    • x分量:1.375 × 16 = 22
    • y分量:-2.5 × 16 = -40
      代码里就存 (22, -40)
  • 代码整数转实际值:实际MV值 = 整数MV ÷ 16
    比如代码里的(48, -32):
    • x分量:48 ÷ 16 = 3.0
    • y分量:-32 ÷ 16 = -2.0
      还原后就是 (3.0, -2.0)

为啥要搞这套转换?

其实就是为了编码效率和计算稳定性:

  • 整数比浮点数更适合熵编码(比如CABAC),能大幅压缩传输的数据量;
  • 避免浮点运算带来的精度损失,编码解码两端能保证完全一致的结果;
  • 硬件对整数运算的支持更成熟,不管是编码还是解码,速度都更快。

内容的提问来源于stack exchange,提问作者Chap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:31:21