HEVC(五):帧间运动补偿预测技术

**帧间运动补偿预测(Inter-frame Motion Compensated Prediction, MCP)*是 H.265/HEVC 视频编码标准中降低*时域冗余、实现高压缩比的关键支撑。

视频序列中,相邻帧之间往往包含极大的相似性(如运动的物体、平移的背景)。帧间预测的核心思想就是:不直接编码当前的图像,而是通过运动矢量(MV)指向已经编码完成的参考帧,只编码当前块与参考块之间的"差值"(残差)。

HEVC 在上一代 H.264 的基础上,对帧间预测的块架构、运动矢量预测机制、插值滤波等进行了颠覆性的升级,使其在同等画质下比 H.264 节省了近 50% 的码率。

基于 CTU 架构的灵活块划分

H.264 时代的运动补偿局限于最大 16×1616 \times 1616×16 的宏块(Macroblock)。面对 4K、8K 等高分辨率视频,微小的宏块会导致运动估计产生大量的冗余运动矢量。

HEVC 引入了全新的树形块划分架构

  • CTU(编码树单元) :最大支持 64×6464 \times 6464×64。
  • CU(编码单元) :CTU 通过四叉树逐步划分,大小可从 64×6464 \times 6464×64 降至 8×88 \times 88×8。
  • PU(预测单元) :是帧间运动补偿的最终基本单位。在一个 CU 内部,可以进一步划分为不同的 PU。

HEVC 提供了两类 PU 划分方式:

  1. 对称划分(CHM) :如 2N×2N2N \times 2N2N×2N(不划分)、2N×N2N \times N2N×N、N×2NN \times 2NN×2N、N×NN \times NN×N。
  2. 非对称划分(AMP) :如 2N×nU2N \times nU2N×nU、2N×nD2N \times nD2N×nD、nL×2NnL \times 2NnL×2N、nR×2NnR \times 2NnR×2N。这在处理画面中边缘仅有一小部分在运动(如地平线平移、车辆贴边运动)时,能极其精准地隔离运动边界,防止引入无关的残差。

创新的运动信息预测机制

在帧间编码中,每个 PU 都需要传输运动矢量(MV)和参考帧索引(RefIdx)。如果对每个块都直接传输真实的 MV,MV 本身就会吃掉海量的码率。为此,HEVC 设计了两套天才的运动矢量预测机制:AMVP 模式Merge 模式

AMVP(Advanced Motion Vector Prediction,高级运动矢量预测)

AMVP 用于传统模式,即编码器仍然需要传输运动残差。它的核心任务是为当前块寻找一个最准的预测运动矢量(PMV)

  • 候选列表构建 :AMVP 建立一个包含 2 个最佳候选 MV 的列表:
    • 空间候选:检查当前块左下方、左侧、右上方、上方、左上方相邻块的 MV。
    • 时域候选(TMVP):检查相邻参考帧中,与当前块同位置(Collocated)的块及右下角块的 MV。
  • 传输信号 :编码器只需在码流中传输:候选列表索引(0或1) + 运动矢量残差(MVD = 真实MV - PMV) + 参考帧索引。由于 PMV 极度精准,MVD 通常接近于 0,大幅节省了 MV 码率。

Merge 模式(运动信息融合)

Merge 模式是 HEVC 的杀手锏。如果当前块的运动状态和它周围的块或前一帧一模一样(例如一辆车作为一个整体在移动),那它就完全不需要传输任何 MVD 和参考帧索引

  • 共享运动参数:Merge 模式构建一个包含最多 5 个候选者的列表(同样包含空间和时域候选)。当前块直接"复制"选中候选者的全部运动信息(包括前向/后向 MV、参考帧表)。
  • Skip 模式 :如果当前块不仅运动信息和邻居一样(使用 Merge),而且由于运动估计太精准,导致扣除参考块后的残差像素全部为 0 ,那么这个块就会进入 Skip(跳过)模式。此时整个 PU 在码流中只需要传输一个 Merge 索引,用几个比特就能代表一个巨大的图像块,这是 HEVC 展现极致压缩率的最高光时刻。

高阶亚像素插值滤波

在物理世界中,物体的运动往往是连续的,不可能刚好每次都平移整数个像素(Pixel)。为了捕捉微小的运动,HEVC 的运动补偿支持 1/41/41/4 像素精度(Quarter-Pel)

为了获取 1/4 或者是 1/2 处的虚拟像素值,编码器必须对周围的整数像素进行插值滤波(Interpolation Filtering)。

  • H.264 的做法:采用 6 抽头(Tap)滤波器计算 1/2 像素,再用双线性内插计算 1/4 像素。过程繁琐且多次取整会导致高频细节丢失。
  • HEVC 的全升级 :直接采用一维长抽头 DCT(离散余弦变换)滤波器
    • 亮度信号 :1/2 像素位置使用 8 抽头 滤波器,1/4 像素位置使用 7 抽头 滤波器。
    • 色度信号 :由于 HEVC 支持 1/81/81/8 像素精度的色度运动补偿,引入了 4 抽头 滤波器。

长抽头的工程优势:抽头数越多,参考的整数像素就越多,插值出来的虚拟像素就越逼真、越平滑,能够完美抑制由于画面高频纹理平移产生的噪点残差。

时域 MVP 与 DPB 约束

帧间预测的强大离不开后台的仓储管理------DPB(Decoded Picture Buffer,解码图像缓冲区)。HEVC 通过构建 List0(前向/主要)和 List1(后向)两个参考列表来管理多参考帧。

时域运动矢量预测(TMVP)的隐患与解决

前面提到,AMVP 和 Merge 都会去前一帧的同位置块(Collocated Block)偷取 MV。这在带来性能增益的同时,导致了解码器的硬件带宽危机。因为解码器在处理当前帧时,必须从外部内存(DDR)中把前一帧的所有 MV 数据(称为 Motion Field)全部读出来。

  • HEVC 优化(Motion Data Compression) :为了降低这部分内存带宽开销,HEVC 在存储前一帧的运动信息时,强制对其进行 16×1616 \times 1616×16 的下采样(压缩) 。每 16×1616 \times 1616×16 的区域只保留一个顶层 MV,使时域 MV 的内存开销暴跌了 16 倍,完美解放了 4K/8K 播放时的芯片总线带宽。

重叠块运动补偿(OBMC)与边界平滑

在 PU 块级别进行独立的运动补偿,容易在 PU 的边界处产生由于运动不一致导致的"不连续性",从而在进入变换量化阶段时产生高频噪声。HEVC 的环路滤波机制(去块滤波、SAO)会在运动补偿完成后对这些边界进行平滑,确保画面融为一体。

帧间预测的参数配置与算力权衡

在工业级编码器(如 x265)中,帧间运动补偿(特别是运动估计运动搜索阶段)占据了整个视频编码器 60% 以上的 CPU 算力

运动搜索策略控制

编码器需要决定如何在参考帧里找运动块:

  • --me <integer/string>:运动搜索算法。
    • dia(菱形搜索)/ hex(六边形搜索):速度极快,适合实时直播(Low-Delay)。
    • umh(非均匀多层次十字交叉搜索)/ star(星型搜索):全面搜寻,能挖掘出极致的残差红利,但极度消耗算力,适合点播离线转码。

亚像素精度的妥协

  • --subme <integer>:亚像素控制等级。决定了插值滤波的精细程度(从仅整数像素搜索到完全开启 8/7 抽头 1/4 像素搜索)。调高此参数能显著降低码率,但会成倍拉长编码时间。
bash 复制代码
# 高清实时直播流配置示例(兼顾帧间压缩与编码速度)
ffmpeg -i input.mp4 -c:v libx265 -x265-params me=hex:subme=2:ref=3:no-amp=1 output.mp4
# (通过使用六边形搜索、降低亚像素级、限制参考帧为3、关闭非对称AMP划分来榨取速度)

总结

HEVC 的帧间运动补偿预测技术是一套以 "大块(CTU)动态裁剪" 铺路、由 "Merge/Skip 免传运动矢量" 控流、并经 "8抽头高阶滤波" 精雕细琢的立体架构。

它深刻洞察了高分辨率视频中像素位移的统计学规律,通过复杂的时域/空间候选预测建立了一套信息共享网络。正是这套精密复杂的运动补偿矩阵,让 H.265/HEVC 在面对高动态、超高清的现代多媒体场景时,依然能够把网络带宽牢牢压制在极低的红线之内。

相关推荐
却道天凉_好个秋8 小时前
HEVC(六):CTC
人工智能·计算机视觉·hevc·ctc
却道天凉_好个秋11 小时前
HEVC(三):GOP
人工智能·hevc·gop
却道天凉_好个秋1 天前
HEVC(二):如何实现并行处理
人工智能·算法·计算机视觉·hevc·瓦片技术·波前并行处理wpp
DogDaoDao10 天前
深入解析 libaom:AV1 开源编解码库技术分析
google·开源·音视频·视频编解码·hevc·av1·libaom
DogDaoDao1 个月前
VVC 参考软件 VTM 全面深度解析:架构设计、核心算法与工程实践
音视频·视频编解码·hevc·h266·vvc·vtm·视频压缩
老姚---老姚1 个月前
编译支持HEVC/H.265 over RTMP / Enhanced RTMP 的 ffmpeg
ffmpeg·h.265·hevc·rtmp·enhanced
却道天凉_好个秋4 个月前
音视频学习(八十六):宏块
音视频·hevc·宏块·ctu
却道天凉_好个秋4 个月前
c++ 四叉树
c++·hevc·四叉树
数据与后端架构提升之路5 个月前
自动驾驶的“脏活”:手撕激光雷达运动畸变与鬼影(附 Python/C++ 核心实现)
自动驾驶·运动补偿·鬼影