H.265 HEVC 入门,从 H.264 升级到更高压缩率

前言

如果说 H.264 是现代视频编码最经典的一代标准,那 H.265,也就是 HEVC,可以直接理解成它的全面升级版。

它没有推翻 H.264 的核心世界观,反而是在原有框架上做了一次系统级增强:

  • I / P / B 帧还在
  • GOP 结构还在
  • 帧内预测、帧间预测还在
  • 参考帧缓存还在
  • NALU 码流组织还在
  • IDR 刷新机制还在

所以学习 H.265 最轻松的方法,不是把它当成一门全新的编码标准,而是把它看成:

H.264 的主架构不变,但内部每个关键模块都变得更强了。

这篇文章就按这个思路来讲,不重复你已经理解的 H.264 主线,而是重点讲清楚:

  • H.265 相比 H.264 到底升级了什么
  • 为什么它能把同等画质下的码率压到更低
  • CTU、四叉树、TU、SAO 这些新增机制到底在做什么
  • H.265 为什么依然必须缓存历史参考帧
  • H.265 最终输出到底是什么
  • 编码和解码完整流程怎么串起来

如果只先记一句话,那么可以先记住这个总纲:

H.265 = HEVC = H.264 的增强版。
核心预测思想没有变,真正变化的是块划分更灵活、预测更强、滤波更强、熵编码更统一,因此在相同画质下通常能比 H.264 节省接近一半码率。


一、为什么已经有 H.264 了,还要再来一个 H.265

H.264 在很长时间里都非常成功,但它也有明显瓶颈,尤其是在分辨率和带宽压力不断提升之后。

最典型的问题是:

  • 1080p 时代够用,但到了 4K、8K,码率压力迅速变大
  • 固定宏块思路不够灵活,大面积平坦区域压缩效率不够高
  • 复杂运动场景下,预测精度还可以继续提升
  • 后处理和环路优化能力不够强

如果把 H.264 的痛点压缩成一句话,就是:

它的基本压缩思路没问题,但很多关键模块已经不够适合更高分辨率和更苛刻的带宽场景。

H.265 就是在这个背景下诞生的。它最核心的目标非常直接:

  • 在相近画质下,进一步降低码率
  • 在有限带宽下,支持更高分辨率视频
  • 提高压缩效率,尤其是 4K / 8K 场景下的效率

所以你会看到 H.265 的一切改动,几乎都围绕一个关键词展开:

更高压缩效率。


二、先抓住本质,H.265 和 H.264 到底什么关系

从主线看,H.265 和 H.264 的编码框架其实高度相似。

flowchart LR
    A[Raw frame] --> B[Split into blocks]
    B --> C[Choose frame type]
    C --> D[Intra or inter prediction]
    D --> E[Residual]
    E --> F[Transform and quant]
    F --> G[Entropy coding]
    G --> H[NALU bitstream]

这条主线没有变。真正变化的是每个环节都比 H.264 做得更激进:

  • 块划分从固定宏块升级成更灵活的树状划分
  • 帧内预测方向大幅增加
  • 帧间预测能力更强
  • 变换单元尺寸更灵活
  • 环路滤波多了一层 SAO
  • 熵编码统一走 CABAC
  • 参数集多了 VPS

所以理解 H.265 时,最稳的方式就是:

不要把它当成另一套完全不同的世界,而要把它看成对 H.264 各模块的逐项升级。


三、H.265 最大的结构变化,不再是固定 16×16 宏块,而是 CTU

这是 H.265 最重要、也最常被问到的点。

H.264 里大家最熟悉的是 16×16 宏块 MB。这个设计在当年很经典,但问题也明显,它的粒度相对固定,不够灵活。

H.265 直接把这个入口换掉了,改成了 CTU,Coding Tree Unit,编码树单元

CTU 最大可以到 64×64,并且可以继续递归拆分。

flowchart TD
    A[CTU 64x64] --> B[32x32]
    B --> C[16x16]
    C --> D[8x8]
    D --> E[4x4]

这件事为什么重要?因为它让编码器第一次可以对不同区域采用完全不同的块粒度。

1. 平坦区域可以用大块

如果画面某个区域变化很小,比如:

  • 蓝天
  • 墙面
  • 背景虚化区域
  • 大面积静止场景

那么用 64×64 这样的大块编码会非常划算,因为这个区域内部本来就很一致,没有必要拆得太碎。

2. 边缘和细节区域可以继续拆小

如果画面里出现这些情况:

  • 文字边缘
  • 人脸轮廓
  • 复杂纹理
  • 快速运动物体

那就继续往下拆,把复杂区域拆成更小的块,这样预测和残差表达都会更精准。

3. 这就是 H.265 压缩率提升的起点

H.265 能明显省码率,第一推动力就是这件事:

用大块吃掉平坦区域,用小块精确描述复杂区域。

H.264 也能分块,但 H.265 在块划分上的自由度明显更高,因此它对不同图像区域的适应能力更强。


四、从 CTU 往下,还要理解 CU、PU、TU

H.265 里块结构比 H.264 更细,所以你会经常看到几个名字:

  • CTU
  • CU
  • PU
  • TU

第一次看会觉得复杂,但其实可以直接按职责理解。

名称 作用 直觉理解
CTU 最大入口块 整个树状划分的起点
CU 编码决策单元 这个区域怎么编码
PU 预测单元 这个区域怎么做预测
TU 变换单元 这个区域怎么做变换和量化

它们不是四套互相独立的世界,而是同一块区域在不同处理阶段的视角。

可以用下面这张图快速记住。

flowchart TD
    A[CTU] --> B[CU split]
    B --> C[PU choose prediction]
    B --> D[TU choose transform]

也就是说:

  • CTU 负责给出一个大入口
  • CU 决定这一块怎么划分和编码
  • PU 负责预测相关的划分与模式
  • TU 负责残差变换和量化时的块结构

这比 H.264 的宏块思路更复杂,但也正因为这种复杂度,H.265 能把预测、变换、残差压缩做得更细。


五、H.265 为什么比 H.264 更省码率,核心升级点到底有哪些

下面这张对比表最适合建立整体印象。

模块 H.264 H.265 HEVC
基本单元 16×16 宏块 MB 最大 64×64 CTU,树状递归划分
帧内预测 方向更少 方向更多,预测更细
帧间预测 较成熟 参考管理和候选模式更强
变换单元 尺寸相对有限 4 / 8 / 16 / 32 更灵活
环路处理 Deblock Deblock + SAO
熵编码 CAVLC 或 CABAC 实际主流统一走 CABAC
参数集 SPS + PPS VPS + SPS + PPS
压缩效率 更高,常见可节省接近一半码率

下面逐项拆开讲。

1. 帧内预测方向更多

H.264 已经有不错的帧内预测,但 H.265 进一步增加了方向模式。直觉上就是:

它更擅长顺着图像边缘、纹理走向去猜当前块。

预测越准,残差越小,后面的变换和量化就越容易压。

2. 帧间预测更强

H.265 仍然保留运动估计和运动补偿这条主线,但它在候选模式、参考管理、运动向量继承等方面都更强。

从结果上看,你可以把它理解成:

  • 更容易找到更好的参考块
  • 更容易复用周围块的运动信息
  • 在复杂运动场景下更不容易浪费码率

3. 变换单元更灵活

H.264 的变换已经很成熟,但 H.265 在 TU 尺寸上更灵活,能更适配不同类型的残差分布。

这意味着:

  • 平滑区域可以更大尺度地处理
  • 细节区域可以更小尺度地保留信息

4. 多了一层 SAO

H.264 常讲去块滤波 Deblocking,而 H.265 在这之后又补了一层 SAO,Sample Adaptive Offset

SAO 的作用不是替代去块,而是进一步修正重建样本,使边缘和局部失真表现更自然。

可以简单记成:

  • Deblock 主要处理块边界感
  • SAO 主要进一步修正重建样本分布

这也是 H.265 看起来画质更“干净”的原因之一。

5. 熵编码更加统一

H.264 里常会讲 CAVLC 和 CABAC 两条线,而在 H.265 里,主流理解就是 CABAC 成为核心方案。

CABAC 更复杂,但压缩效率更高,所以它符合 H.265 的整体设计哲学:

用更高复杂度,换更低码率。


六、一帧图像输入 H.265 后,完整编码流程是什么

如果你已经理解 H.264,那么看 H.265 的完整编码流程会非常顺。

flowchart LR
    A[Raw YUV frame] --> B[CTU split with tree]
    B --> C[Frame type choose]
    C -->|I| D[Intra prediction]
    C -->|P B| E[Inter prediction with refs]
    D --> F[Pred block]
    E --> F[Pred block]
    F --> G[Residual]
    G --> H[Transform by TU]
    H --> I[Quant]
    I --> J[Scan]
    J --> K[CABAC]
    K --> L[VPS SPS PPS and slices]
    L --> M[HEVC bitstream]

1. 输入仍然是原始视频帧

和 H.264 一样,输入不是 JPG、PNG,也不是 MP4,而是一帧未压缩的原始图像,常见仍然是 YUV420。

2. 先按 CTU 入口进行树状划分

编码器先从较大的 CTU 入手,然后根据区域复杂度决定是否继续拆分。

3. 决定当前帧类型

  • I 帧只做帧内预测
  • P 帧参考过去参考帧
  • B 帧可参考前后参考图像
  • IDR 负责重启参考链

4. 做预测

这一层和 H.264 主线一致,只不过预测工具更强,块划分更灵活。

5. 计算残差

仍然是:

原始块 - 预测块 = 残差块

6. 对残差做变换和量化

这里 H.265 会结合更灵活的 TU 结构进行处理,让不同区域用更适合自己的变换粒度。

7. 用 CABAC 熵编码

把前面产生的语法元素压成更紧凑的二进制数据。

8. 打包成 H.265 码流

最后组织成 VPS、SPS、PPS、Slice 等 NAL 单元,输出 HEVC 比特流。


七、H.265 最终输出到底是什么

这个问题和 H.264 完全对应。

H.265 输出的不是图片,也不是 MP4 文件,而是:

H.265 / HEVC 编码后的二进制比特流。

其中常见的 NAL 单元包括:

  • VPS
  • SPS
  • PPS
  • IDR / I / P / B 对应的切片数据
  • SEI 等补充信息
flowchart LR
    A[HEVC stream] --> B[VPS]
    A --> C[SPS]
    A --> D[PPS]
    A --> E[IDR or I slice]
    A --> F[P slice]
    A --> G[B slice]
    A --> H[SEI]

这里和 H.264 的一个直观区别就是:

H.265 多了 VPS,Video Parameter Set。

所以如果你在面试里被问到 H.264 和 H.265 的参数集区别,一个很稳的回答就是:

  • H.264 常见参数集是 SPS、PPS
  • H.265 常见参数集是 VPS、SPS、PPS

同样也要强调一点:

这些码流里并没有“完整图片”这个概念,只有参数、预测信息、运动信息、残差信息和语法元素。必须经过解码器,才能重建出图像帧。


八、H.265 为什么依然必须缓存参考帧

这个问题和 H.264 一样重要,而且答案几乎一样:

必须缓存,编码器和解码器两边都必须缓存。

因为 P 帧和 B 帧的本质没有变,它们还是建立在参考图像之上的。

1. I 帧编码后也要进缓存

I 帧虽然不依赖别的参考帧,但它自己重建完成之后,往往会进入参考帧列表,供后续 P/B 帧使用。

2. P 帧必须读取历史参考帧

P 帧的核心就是“拿过去的一张或几张参考图来预测现在”。如果没有参考帧缓存,就不存在运动估计和运动补偿。

3. B 帧会进一步增加缓存和时序复杂度

B 帧既可能参考前向,也可能参考后向参考图像,因此会让:

  • 参考管理更复杂
  • 编码顺序和显示顺序更容易分离
  • 延迟更高

4. H.265 一般能管理更多参考信息

和 H.264 相比,H.265 在参考管理上更强,因此实际工程里经常会看到它对参考图像利用得更充分。

但核心原则完全没变:

没有参考缓存,就没有 P/B 帧。


九、缓存里存的依然不是原始帧,而是重建帧

这是视频编码里一个非常关键的统一原则,在 H.265 里依然成立。

缓存里保存的不是原始输入帧,而是重建帧。

原因和 H.264 一样:

  • 编码器后续预测时看到的参考图像
  • 解码器后续预测时看到的参考图像

必须一致。

如果编码器用原始图作参考,而解码器只能用重建图作参考,那么两边后续预测就会逐渐漂移,最后画面无法严格一致。

所以 H.265 编码器内部也会有一条本地重建路径。

flowchart TD
    A[Original frame] --> B[Prediction]
    B --> C[Residual]
    C --> D[Transform and quant]
    D --> E[CABAC bitstream]
    D --> F[Inverse quant and inverse transform]
    F --> G[Add prediction]
    G --> H[Reconstructed frame]
    H --> I[Reference buffer]

这张图对应的工程理解是:

  • 编码器一边在输出码流
  • 一边在本地重建参考帧
  • 后续帧预测都基于重建帧

这就是编码器和解码器能长期保持一致的基础。


十、IDR 在 H.265 里依然是参考链的重启点

H.265 没有取消这个核心机制。

IDR 的意义仍然可以概括成:

  • 从这里开始可以重新建立参考链
  • 后续画面不再依赖这个点之前的参考图像
  • 解码器可以丢弃旧参考缓存
  • 丢包或错误传播可以在这里被截断

所以不管是 H.264 还是 H.265,IDR 都可以理解成一个非常重要的随机访问和状态重置点。


十一、H.265 解码流程,本质上还是编码的逆过程

解码流程和 H.264 非常接近,只不过对应的是 H.265 的语法和工具集。

flowchart LR
    A[HEVC bitstream] --> B[Parse VPS SPS PPS NALU]
    B --> C[CABAC decode]
    C --> D[Inverse quant]
    D --> E[Inverse transform]
    E --> F[Residual]
    F --> G[Intra or inter reconstruct]
    G --> H[Deblock and SAO]
    H --> I[Output YUV frame]
    I --> J[Reference buffer]

它的主线可以压缩成这几步:

  1. 解析 VPS、SPS、PPS 和 Slice
  2. 做 CABAC 熵解码
  3. 反量化、反变换,恢复残差
  4. 结合帧内预测或运动补偿重建图像
  5. 做 Deblock 和 SAO
  6. 输出重建帧,并写入参考缓存

十二、H.264 和 H.265 最该怎么对比着记

如果要快速建立记忆,最稳的方式是分成“相同点”和“升级点”。

1. 相同点

两者共有的主干逻辑包括:

  • 都有 I / P / B 帧
  • 都有 GOP 和 IDR
  • 都有帧内预测、帧间预测
  • 都要编码残差
  • 都需要变换、量化、熵编码
  • 都输出 NALU 组织的比特流
  • 都依赖参考帧缓存
  • 都缓存重建帧而不是原始帧

2. 升级点

H.265 相比 H.264 的升级重点主要是:

  • 块划分更灵活,CTU 替代固定宏块
  • 预测能力更强,特别是帧内方向更多
  • 变换单元更灵活
  • 环路滤波更强,增加 SAO
  • 参数集更完整,多了 VPS
  • 压缩效率更高,但复杂度也更高

3. 一句话记忆版

H.264 像是成熟稳定的通用方案,H.265 则是在相同主干下,把每个核心模块都强化了一轮,用更高复杂度换来更低码率。


十三、H.265 的优缺点和实际应用

1. 优点

H.265 最明显的优点就是压缩效率高。

在相近主观画质下,它通常能比 H.264 节省大量码率,因此特别适合:

  • 4K / 8K 视频
  • 带宽敏感的超清点播
  • 码率压力大的监控存储
  • 对容量敏感的高分辨率视频归档

2. 缺点

代价也很明显:

  • 编码复杂度更高
  • 解码压力更大
  • 硬件兼容性要求更高
  • 部分场景下延迟控制更麻烦
  • 历史上专利和授权成本问题更复杂

3. 典型应用场景

现在比较典型的应用包括:

  • 4K 流媒体平台
  • 高清监控录像
  • 车载高分辨率视频系统
  • UHD 蓝光和高码率点播
  • 对存储空间特别敏感的视频业务

不过在极致兼容性或极致低延迟场景里,H.264 仍然非常常见。这也说明:

H.265 不是完全替代 H.264,而是在更高压缩效率场景下优势更明显。


十四、最后把 H.265 真正串成一句话

如果要把这篇文章压缩成一句完整描述,那么可以这样说:

H.265 延续了 H.264 以预测为核心、以残差压缩为主线、以参考帧缓存为基础的编码框架,但通过 CTU 树状划分、更强预测、更灵活变换、更强环路滤波和更统一的熵编码,在相同画质下显著降低了码率。

所以理解 H.265 的关键,不是忘掉 H.264,而是站在 H.264 之上继续往前走。


附,一张总览图

flowchart TD
    A[Raw YUV frame] --> B[CTU tree split]
    B --> C[Frame type]
    C --> D[Intra pred]
    C --> E[Inter pred]
    D --> F[Residual]
    E --> F[Residual]
    F --> G[Transform by TU]
    G --> H[Quant]
    H --> I[CABAC]
    I --> J[HEVC bitstream]
    H --> K[Inverse quant]
    K --> L[Inverse transform]
    L --> M[Reconstruct frame]
    M --> N[Deblock and SAO]
    N --> O[Reference buffer]

这张图值得和 H.264 的总览图对着看。

你会发现两者主线非常像,但 H.265 在块划分、变换、滤波和参考利用上都更激进,这也是它压缩效率更高的根本原因。


H.265 HEVC 入门,从 H.264 升级到更高压缩率
https://breaker505.github.io/2026/04/04/h265-hevc/
作者
爱发呆的鱼
发布于
2026年4月4日
许可协议