音视频学习(八十六):宏块

什么是宏块(Macroblock)?

在传统的视频编码标准(如 MPEG-2 或 H.264)中,宏块是进行预测、变换、量化和编码的基本单元。

  • 基本组成: 一个标准的宏块通常涵盖 16x16 个像素的亮度(Luma)区域,以及对应的色度(Chroma)区域。
  • 核心逻辑: 视频压缩的基础是"消除冗余"。宏块的存在是为了让编码器能够针对一小块图像区域决定:它是应该从上一帧移动过来的(运动补偿),还是应该直接描述细节(帧内预测)。

什么是宏块划分?

H.264的宏块划分

基本概念

H.264 中,一个宏块的基本尺寸为 16×16 像素(亮度 Y 分量)

在 YUV 4:2:0 采样格式下:

  • Y(亮度):16×16
  • U(色度):8×8
  • V(色度):8×8

因此,一个宏块实际包含:

  • 256 个亮度像素
  • 64 个 U 色度像素
  • 64 个 V 色度像素

宏块是 运动估计、预测、变换、量化和熵编码 的基本处理单位。

宏块的分类

H.264 根据编码方式的不同,将宏块分为以下几类:

1)帧内宏块(Intra MB)

  • 不参考其他帧
  • 只利用当前帧内的已编码像素进行预测
  • 主要用于 I 帧,也可出现在 P/B 帧中

帧内宏块支持多种预测模式:

  • Intra 16×16:整块预测
  • Intra 4×4 / Intra 8×8:更细粒度预测,适合纹理复杂区域

2)帧间宏块(Inter MB)

  • 参考之前或之后的帧
  • 使用运动补偿进行预测
  • 常见于 P 帧和 B 帧

帧间宏块是 H.264 提高压缩率的核心。

3)Skip 宏块

  • 特殊的帧间宏块
  • 不传输残差和运动向量
  • 解码器可直接推导
  • 在静态或低运动场景中大量出现

宏块的子块划分方式

H.264 的一个关键创新是:
宏块可以被灵活地划分为多个不同大小的子块进行预测

帧间预测的宏块划分

对于 Inter 宏块,16×16 的宏块可以进一步划分为以下几种方式:

  • 16×16(不划分)
  • 16×8(上下两个子块)
  • 8×16(左右两个子块)
  • 8×8(四个子块)

8×8 子块 还可以继续细分为:

  • 8×4
  • 4×8
  • 4×4

最小可到 4×4 的运动补偿块。

这种多层次划分方式使得编码器能够:

  • 对平坦区域使用大块,减少码率
  • 对运动复杂或边缘区域使用小块,提高预测精度
帧内预测的宏块划分

帧内预测主要分为:

  • Intra 16×16
  • Intra 8×8(High Profile)
  • Intra 4×4

小块帧内预测可以更好地适应:

  • 细节纹理
  • 锐利边缘
  • 高频信息

宏块在编码流程中的位置

一个宏块在 H.264 编码流程中依次经历:

  1. 宏块类型判定(Intra / Inter / Skip)
  2. 宏块划分方式选择
  3. 帧内或帧间预测
  4. 计算残差
  5. 整数变换(4×4 / 8×8)
  6. 量化
  7. 熵编码(CAVLC / CABAC)

H.265的宏块划分(CTU)

CTU的概念

在 H.264/AVC 中,视频编码的基本处理单元是 宏块(Macroblock,MB) ,固定大小为 16×16 像素。这种固定尺寸在早期分辨率下尚可接受,但随着高清(1080p)乃至超高清(4K、8K)视频的普及,编码效率和灵活性逐渐成为瓶颈。

H.265/HEVC 引入了全新的块结构体系,用 编码树单元(Coding Tree Unit,CTU) 取代传统宏块,作为编码的最基本顶层单元。CTU 是 H.265 提升压缩效率、支持超高清编码的核心设计之一。

CTU 的基本结构与尺寸

CTU 的尺寸不再固定,支持以下几种大小:

  • 64×64(最常用、默认)
  • 32×32
  • 16×16

编码器可根据配置或视频特性选择 CTU 的最大尺寸。实际应用中,64×64 CTU 是主流选择,尤其适用于高分辨率视频。

CTU 是编码结构的"根节点",后续所有子块划分都基于 CTU 进行。

CTU 包含的三个核心单元

一个 CTU 在逻辑上包含三类单元:

  1. 编码单元(CU, Coding Unit)
  2. 预测单元(PU, Prediction Unit)
  3. 变换单元(TU, Transform Unit)

它们通过树状结构(四叉树)进行层级划分,各司其职。

CU:编码单元的树状划分

1. 四叉树划分机制

CTU 通过 四叉树(Quadtree) 递归划分为多个 CU。

每一次划分,当前 CU 被分成 4 个等大小子 CU。

例如,一个 64×64 的 CTU 可以这样划分:

  • 不划分:1 个 64×64 CU
  • 划分一次:4 个 32×32 CU
  • 再划分:16 个 16×16 CU
  • 继续划分:64 个 8×8 CU(最小 CU)

最小 CU 通常为 8×8(也可配置为 16×16)。

2. CU 的作用

CU 是 编码决策的核心单元,主要决定:

  • 是否继续划分
  • 使用帧内预测还是帧间预测
  • 参考帧选择
  • 运动估计模式

编码器会根据率失真优化(RDO)在不同 CU 划分方案中选择最优结构。

PU:预测单元的灵活划分

1. PU 的功能

PU 决定 预测方式与预测区域形状,主要服务于:

  • 帧内预测(Intra)
  • 帧间预测(Inter)

PU 并不直接决定编码结构,而是描述预测行为。

2. PU 划分模式

在一个 CU 内,PU 可采用多种形状,例如:

  • 对称划分:
    • 2N×2N
    • N×2N
    • 2N×N
  • 非对称划分(AMP):
    • 2N×nU / 2N×nD
    • nL×2N / nR×2N

这些灵活的 PU 形状可以更精准地匹配物体边缘和运动方向,显著提升运动补偿精度。

TU:变换单元的自适应设计

1. TU 的作用

TU 决定 残差的变换与量化方式,对应传统 DCT/IDCT 处理流程。

2. TU 的划分方式

TU 同样采用四叉树结构(Residual Quadtree, RQT):

  • 最大 TU:32×32
  • 最小 TU:4×4

TU 的划分可以与 CU、PU 不一致,使得平坦区域使用大变换块、细节区域使用小变换块,从而提高能量集中度和编码效率。

CTU 划分带来的优势

1. 对高分辨率视频更友好
  • 大 CTU 能覆盖更大平坦区域
  • 减少块边界,提高压缩效率
  • 降低编码开销
2. 更强的自适应能力
  • CU 负责结构决策
  • PU 负责预测模式
  • TU 负责变换精度

三者解耦,使编码更灵活。

3. 明显提升压缩性能

相比 H.264,HEVC 在相同画质下:

  • 码率降低约 40%~50%
  • 对 4K/8K 视频优势尤为明显

H.265 通过引入 CTU 及其多层级划分结构,彻底打破了 H.264 固定宏块尺寸的限制。CTU + CU + PU + TU 的层次化设计,使编码器能够在空间预测、时间预测和频域变换三个维度进行精细优化。这种结构是 HEVC 能够高效支持超高清和复杂视频内容的关键基础。

宏块/CTU 划分的具体流程

无论是 H.264 的宏块分割,还是 H.265 的四叉树递归,其核心流程都可以概括为以下四个阶段:

第一阶段:初始化与预分析

编码器首先读入当前原始图像帧,并将其划分为固定大小的网格(H.264 为 16x16,H.265 为 64x64)。

  • 计算纹理复杂度: 编码器会初步计算该区域的方差。如果方差很小(区域平坦),编码器会倾向于不划分;如果方差很大,则预判需要细分。

第二阶段:递归搜索与模式尝试

这是最耗费计算资源的阶段。以 H.265 为例,流程如下:

  1. 从最大尺寸开始: 首先尝试以 64x64 作为编码单元(CU)。
  2. 计算代价: 计算该尺寸下的率失真代价(RD Cost)
    • 公式参考:J = D + λ x R(其中 J 是代价,D 是失真,R 是码率,λ 是拉格朗日乘子)。
  3. 四叉树拆分: 将 64x64 拆分为四个 32x32 的块,对每一个子块重复计算模式(帧内/帧间)和代价。
  4. 继续向下递归: 直到达到最小限制(如 8x8 )或代价不再减小。

第三阶段:自底向上的最优路径选择

当所有可能的划分组合都计算完代价后,编码器进行"剪枝"比对:

  • 比较"一个 32x32 块的代价"与"四个 16x16 子块代价之和"。
  • 如果拆分后的总代价更小,则保留拆分结果;否则,合并回大块。

第四阶段:确定最终划分并写入码流

最终确定的划分结构会被编码成一系列划分标志位(Split Flags)。解码器读取这些 0 和 1,就能完全还原出编码器当时的拆分形状。

宏块划分要实现的功能

宏块划分不仅仅是为了把图切碎,它承载了视频压缩中四个关键的任务功能:

1. 实现自适应预测(Adaptive Prediction)

  • 功能描述: 不同的图像内容需要不同的预测策略。
  • 意义: 在一个宏块内,如果左半边是静态背景,右半边是运动物体,通过划分,左半边可以采用**跳过模式(Skip Mode)*不花码率,而右半边采用*运动补偿。这种灵活分配的能力是压缩高动态视频的基础。

2. 精准匹配运动矢量(MV Precision)

  • 功能描述: 宏块划分越细,运动矢量(MV)的粒度就越细。
  • 意义: 对于旋转、缩放或细微颤动的物体,大块无法精确描述其位移。细小划分(如 4×44 \times 44×4)能为每个微小区域提供独立的运动矢量,极大减小了预测后的残差(Residual),从而节省了传输残差所需的比特。

3. 优化变换与量化(Transform Efficiency)

  • 功能描述: 划分直接影响变换单元(TU)的大小。
  • 意义: * 大 TU: 适合平滑区域,能将能量集中在极少数低频系数上,压缩率极高。
    • 小 TU: 适合高频细节(如文字边缘、树叶),能防止量化误差扩散,有效抑制"蚊式噪声"和"环状效应"。

4. 码率控制与缓冲区平衡

  • 功能描述: 动态调整划分深度以满足带宽限制。
  • 意义: 当网络带宽下降时,编码器会强制减少划分深度(多用大块),虽然牺牲了一部分细节,但保证了视频的流畅度,实现了码率自适应的功能。
相关推荐
小咖自动剪辑2 小时前
AI 智能视频无损放大工具:支持超分辨率与智能补帧
人工智能·音视频·智能电视
AI周红伟3 小时前
周红伟:2026年视频大模型第一篇,Sora 2 技术原理和技术架构,Sora2核心技术代码首次深度解析
音视频
阿甘编程点滴4 小时前
自媒体视频配音方案怎么选:从脚本到稳定输出
音视频·媒体
却道天凉_好个秋4 小时前
c++ 四叉树
c++·hevc·四叉树
冬奇Lab5 小时前
一天一个开源项目(第2篇):Remotion - 用 React 程序化创建视频
react.js·开源·音视频
一招定胜负5 小时前
opencv视频处理
人工智能·opencv·音视频
行业探路者6 小时前
音频二维码让音频分享变得更简单快捷
学习·音视频·语音识别·二维码·设备巡检
EasyNVR19 小时前
docker版EasyNVR如何使用同步插件教程(包含网盘挂载,路径映射等)
docker·容器·音视频
IT陈图图19 小时前
Flutter × OpenHarmony 跨端实践:从零构建一个轻量级视频播放器
flutter·音视频·鸿蒙·openharmony