1. H265编码基础:HEVC标准概述与工具链

各位同学好,我是老张。做视频编码这行十几年了,从H.263一路摸爬滚打到现在的H.266。今天咱们聊H.265,也就是HEVC。说实话,我刚接触H.265那会儿也被它的复杂度吓了一跳——编码工具比H.264多了将近一倍。但别怕,咱们一章一章啃下来。

1.1 为什么需要H.265?

先问个问题:4K视频为什么没在H.264时代普及?

答案很简单——码率扛不住。H.264压缩4K视频,码率动不动就50Mbps以上。你想想看,一部两小时的电影,光传输就得花半小时。H.265的出现,说白了就是要在同等画质下,把码率砍掉一半。

核心目标:H.265/HEVC(High Efficiency Video Coding)的目标是在同等主观画质下,比H.264节省50%的码率。这不是吹的,我在实际项目中测过,大部分场景确实能达到40%-50%的压缩率提升。

1.2 H.265 vs H.264:到底强在哪?

我习惯从三个维度对比:编码工具、块划分、参考帧管理。下面这张表基本能说清楚。

对比维度 H.264/AVC H.265/HEVC
最大块尺寸 16×16(宏块) 64×64(编码树单元CTU)
块划分方式 固定宏块+子块 四叉树递归划分
帧内预测模式 9种 35种
运动补偿精度 1/4像素 1/4像素(亮度)+ 1/8像素(色度)
变换尺寸 4×4 / 8×8 4×4 / 8×8 / 16×16 / 32×32
去块滤波 有 有 + SAO(样点自适应补偿)
并行处理 Slice级 Tile / WPP / Slice
参考帧管理 DPB(解码图像缓冲区) DPB + 参考帧列表增强

嗯,这里我要重点说一下CTU。H.264的宏块是16×16固定大小,遇到平坦区域浪费,遇到纹理复杂区域又不够用。H.265的CTU最大可以到64×64,然后用四叉树递归往下切。我在做监控视频编码时,背景区域经常直接用一个64×64的CTU搞定,码率省了一大截。

1.3 H.265编码工具链简介

一个完整的H.265编码器,说白了就是下面这几个模块串起来。我画了张图,大家先有个整体印象。

H.265 编码工具链核心流程 原始视频帧 CTU划分 + 四叉树递归分割 帧内预测(35种模式) 帧间预测(运动估计+补偿) DCT/DST变换 + 量化 去块滤波 + SAO H.265 码流 编码器核心决策:选帧内还是帧间

这张图基本就是H.265编码器的骨架。我来逐个模块说说。

1.4 核心模块详解

1.4.1 CTU与四叉树划分

CTU是H.265最基本的处理单元,尺寸可以是64×64、32×32或16×16。每个CTU可以递归划分成更小的CU(编码单元),最深可以到8×8。

我记得第一次调H.265编码器时,发现同样的视频源,CTU大小不同码率能差20%。后来总结出经验:

  • 平坦区域(比如天空、白墙):用64×64 CTU,少划分,省码率
  • 纹理复杂区域(比如树叶、人群):切到16×16甚至8×8,保细节
  • 运动剧烈区域:配合帧间预测,CU尺寸可以适当放大

我的经验:实际项目中,我一般把CTU设为64×64,然后让编码器根据RD cost自动决定划分深度。但如果你做的是实时编码,建议限制最大划分深度到32×32,能省不少计算量。

1.4.2 帧内预测

H.265的帧内预测有35种模式,比H.264多了26种。多了哪些?主要是角度模式从8种扩充到33种,覆盖了更精细的方向。

说白了,帧内预测就是根据已经编码的相邻像素,推测当前块的内容。方向越精细,预测越准,残差越小,码率越低。

但代价是什么?计算量。35种模式全遍历一遍,复杂度是H.264的3-4倍。我在做移动端编码器时,一般只选最可能的几种模式做RDO(率失真优化),能省70%的时间。

1.4.3 帧间预测

帧间预测这块,H.265引入了几个新东西:

  • Merge模式:直接从相邻块继承运动矢量,省掉运动估计的计算
  • AMVP(高级运动矢量预测):从候选列表中选最优的运动矢量预测值
  • 运动补偿精度:亮度1/4像素,色度1/8像素

嗯,这里有个坑。我曾经在推流项目里发现,运动估计的搜索范围设太大,编码延迟直接飙到500ms。后来把搜索范围从64×64缩到32×32,延迟降到100ms以内,画质损失几乎看不出来。

1.4.4 变换与量化

H.265支持4×4、8×8、16×16、32×32四种变换尺寸。大尺寸变换适合平坦区域,小尺寸变换适合纹理区域。

变换类型上,帧内预测的4×4块用DST,其他用DCT。为什么?DST对帧内预测残差的能量集中效果更好,这是我做算法验证时实测过的。

1.4.5 环路滤波

H.265的环路滤波比H.264多了一个SAO(样点自适应补偿)。SAO的作用是啥?说白了就是修整重建图像的像素值,减少振铃效应和条带效应。

我做过对比测试:同样码率下,开SAO比不开SAO的PSNR能高0.3-0.5dB。主观上看,画面边缘更干净,没有那种"毛刺感"。

1.5 编码器实现选择

市面上主流的H.265编码器有这么几个:

编码器 特点 适用场景
x265 开源,参数丰富,质量好 离线转码、点播
Intel MediaSDK 硬件加速,低延迟 实时推流、直播
NVIDIA NVENC GPU加速,吞吐量高 云端转码、游戏录制
Apple VideoToolbox 系统级,功耗低 iOS/macOS应用
HM(参考软件) 标准参考实现,速度慢 学术研究、标准验证

注意:千万不要在生产环境用HM编码器。它追求的是压缩率极致,编码速度慢到令人发指。我曾经用HM编码一段10分钟的1080p视频,跑了整整6个小时。x265用同样的参数,15分钟就搞定了,压缩率只差不到5%。

1.6 本章小结

H.265的核心优势就一句话:用更复杂的编码工具,换更低的码率。CTU四叉树划分、35种帧内预测、SAO环路滤波,这些都是H.264没有的武器。

但复杂度提升也是实实在在的。后面几章我会详细讲怎么在保证画质的前提下,把这些工具用得更高效、更稳定。特别是推流场景下的延迟控制和码率波动,那才是真正考验编码器功底的地方。

好,第一章就到这儿。大家先把基础概念理清楚,后面咱们开始动手调参数。