1. H265编码基础:HEVC标准概述、与H264的对比、编码框架与块结构
各位同学好,我是老张。做视频编码这行十几年了,从H.264一路摸爬滚打到H.265。今天咱们聊聊HEVC的基础,也就是H.265。说实话,我刚接触H.265那会儿,也被它那一堆新概念搞得头大。但后来发现,只要把核心逻辑理清楚,这东西其实没那么玄乎。
1.1 HEVC标准概述——为什么要有它?
H.265/HEVC,全称是High Efficiency Video Coding。说白了,就是比H.264更高效的压缩标准。2013年正式发布,目标是——在同等画质下,码率再砍一半。
为什么会这样?因为视频分辨率从1080p往4K、8K跑了,H.264扛不住了。我记得2015年做第一个4K项目时,用H.264压出来的码率,带宽根本撑不住。那时候我就知道,H.265是必然的选择。
HEVC的核心目标:相比H.264,在相同主观画质下,码率降低50%。
当然,代价是计算复杂度翻了好几倍。嗯,这里要注意——编码器变慢了,解码器也得跟着升级。所以H.265的普及,其实是硬件解码能力跟上之后才真正开始的。
1.2 H.265 vs H.264——到底差在哪?
我经常被问到:H.265比H.264强在哪?咱们直接看对比表,一目了然。
| 对比项 | H.264/AVC | H.265/HEVC |
|---|---|---|
| 发布年份 | 2003 | 2013 |
| 压缩效率 | 基准 | 提升约50% |
| 最大块尺寸 | 16×16(宏块) | 64×64(CTU) |
| 块划分方式 | 固定宏块 | 四叉树递归划分 |
| 帧内预测模式 | 9种 | 35种 |
| 运动补偿精度 | 1/4像素 | 1/4像素(亮度) |
| 变换尺寸 | 4×4, 8×8 | 4×4, 8×8, 16×16, 32×32 |
| 环路滤波 | 去块滤波 | 去块滤波 + SAO |
| 并行处理 | 有限 | WPP, Tiles |
你看,从块结构到预测模式,H.265几乎全面升级。我个人习惯把H.265看作H.264的「全面进化版」——不是小修小补,而是底层逻辑的重构。
我的经验:如果你手头有H.264的编码基础,学H.265会快很多。核心思想没变——预测+变换+量化+熵编码,只是每个环节都做得更精细了。
1.3 编码框架——整体流程长什么样?
H.265的编码框架,说白了还是那套混合编码架构。我画了一张图,帮你把整个流程串起来。
整个流程其实就五步:预测、残差、变换、量化、熵编码。H.265在这五步上都做了升级。比如预测更精细了,变换尺寸更灵活了,量化矩阵也更智能了。
我曾经在一个项目中,为了压一个4K的纪录片,反复调参。最后发现,问题出在预测模式的选择上——H.265的35种帧内模式,选对了,码率能省一大截。
1.4 块结构——从宏块到CTU的进化
H.265最核心的变化,就是块结构。H.264用的是16×16的宏块,固定大小。H.265换成了CTU(Coding Tree Unit),最大可以到64×64。
你想想看,一个64×64的块,比16×16大了16倍。对于平坦区域(比如天空、墙面),一个大块就能搞定,码率自然省下来了。
关键概念:CTU(编码树单元)是H.265的基本处理单元,最大64×64。CTU可以递归划分为更小的CU(编码单元),划分方式采用四叉树结构。
H.265的块结构分三层:
- CU(Coding Unit):负责预测模式的选择,帧内还是帧间。
- PU(Prediction Unit):负责具体的预测操作,比如运动估计。
- TU(Transform Unit):负责变换和量化,尺寸可以独立于CU。
这三层可以不一样大。举个例子:一个64×64的CU,PU可能分成两个32×64,TU又可能分成多个8×8。这种灵活性,是H.264完全做不到的。
避坑指南:我曾经在调优时,把CTU设成64×64,结果编码速度慢得离谱。后来发现,对于1080p以下的分辨率,32×32的CTU其实更划算。不是越大越好,得看场景。
1.5 四叉树划分——递归的艺术
H.265的块划分,用的是四叉树递归。什么意思?就是一个CTU,可以分成四个子块,每个子块又可以继续分,直到最小8×8。
我画个图帮你理解:
这种递归划分的好处是——纹理复杂的地方用小块,平坦的地方用大块。编码器会算一个RD cost(率失真代价),选最优的划分方式。
注意:四叉树划分深度越深,编码越精细,但计算量也越大。实际项目中,我一般限制最大深度为3或4,再深收益就不明显了。
1.6 总结——这一章你该记住什么?
好了,咱们捋一下这章的核心:
- H.265比H.264压缩效率高50%,但计算复杂度也高很多。
- 编码框架还是那五步:预测、残差、变换、量化、熵编码。
- 块结构从16×16宏块升级到64×64 CTU,支持四叉树递归划分。
- CU、PU、TU三层分离,灵活性大幅提升。