news 2026/2/17 9:34:39

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
音视频学习(八十六):宏块

什么是宏块(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. 码率控制与缓冲区平衡

  • 功能描述:动态调整划分深度以满足带宽限制。
  • 意义:当网络带宽下降时,编码器会强制减少划分深度(多用大块),虽然牺牲了一部分细节,但保证了视频的流畅度,实现了码率自适应的功能。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/15 17:37:09

Flutter for OpenHarmony 剧本杀组队App实战22:快速匹配功能实现

引言 快速匹配功能帮助用户自动寻找合适的队伍,无需手动浏览组队列表。本篇将实现带有匹配动画的快速匹配页面。快速匹配是现代社交应用的重要功能,通过算法自动配对用户,大大提升了用户体验和应用的活跃度。这个功能特别适合剧本杀组队场景…

作者头像 李华
网站建设 2026/2/16 3:42:13

云端VS本地 RFID资产管理系统怎么选?优缺点大揭秘

一、开篇:资产 “迷路”?RFID 系统部署抉择是关键 1.1 传统资产管理的 “老大难” 痛点 家人们,在企业的日常运营里,资产管理要是没做好,那可真是麻烦不断!就说传统的人工盘点方式,简直就是一…

作者头像 李华
网站建设 2026/2/9 11:27:05

大模型应用文本理解OpenAI使用入门篇

前言 本文介绍使用OpenAI完成特定文本理解任务。 构建环境 本地安装Ollama或通过阿里云百炼平台获取API_KEY ,https://bailian.console.aliyun.com/cn-beijing/?spma2c4g.11186623.0.0.2dab6323kanAoF&tabmodel#/api-key,配置到环境变量中后需要重启电脑生效。…

作者头像 李华
网站建设 2026/2/14 0:14:53

信号处理仿真:滤波器设计与仿真_18.实时信号处理仿真

18. 实时信号处理仿真 18.1 实时信号处理的基本概念 实时信号处理是指在信号采集或生成的同时进行处理,以满足特定的时延要求。在许多应用中,如通信系统、音频处理、视频处理等,实时处理是必不可少的。实时信号处理的关键在于系统能够在限定…

作者头像 李华
网站建设 2026/2/16 16:45:16

大厂迷思:为什么顶级工程师会产出难以维护的代码

当你终于通过几轮严苛的技术面试,加入一家享有盛誉的大型科技公司时,往往会对即将接触的代码库抱有极高的期待。你想象着整洁的架构、清晰的文档以及如教科书般完美的逻辑实现。然而现实往往极具冲击力:你所看到的可能是一个由无数补丁堆叠、…

作者头像 李华
网站建设 2026/2/14 0:14:48

多级缓存必要性

Java多级缓存设计:应对微博明星官宣的高并发场景 一、多级缓存原理与必要性 1.1 为什么需要多级缓存? 单级缓存的问题: 性能瓶颈:所有请求都打到同一缓存层,压力集中容错性差:缓存层故障直接影响整体可…

作者头像 李华