1. H.265前世今生:从H.264到H.265的演进
做视频编码这些年,我经常被问到同一个问题:「H.265到底比H.264强在哪?」 说实话,这个问题看似简单,但真要讲透,得从根儿上说起。
H.264(AVC)是2003年推出的标准。它太成功了,到今天还在广泛使用。但到了2010年左右,4K电视开始冒头,H.264就有点吃力了。你想想看,同样一部4K电影,用H.264压缩,码率动不动就飙到50-60 Mbps,这谁受得了?
于是,2013年,H.265(HEVC)正式发布。它的目标很明确:在同等画质下,码率再砍一半。
1.1 从H.264到H.265:到底改了啥?
说白了,H.265不是小修小补,而是把编码的底层逻辑重新捋了一遍。我挑几个最核心的差异跟你聊聊。
| 对比维度 | H.264 (AVC) | H.265 (HEVC) |
|---|---|---|
| 编码树单元 (CTU) | 宏块固定16x16 | CTU最大64x64,可递归划分 |
| 帧内预测方向 | 9种模式 | 35种模式(含33个角度) |
| 运动补偿精度 | 1/4像素 | 1/4像素 + DCT插值优化 |
| 变换块大小 | 4x4 / 8x8 | 4x4 ~ 32x32 |
| 去块滤波 | 基于宏块边界 | 基于CU边界,更精细 |
| 并行处理 | Slice级 | Tile + WPP(波前并行) |
看到这个表,你可能觉得「不就是把块变大了、预测变多了吗?」 嗯,确实有这种感觉。但实际效果差很多。
核心优势一句话: H.265用更灵活的分块方式,让编码器能在「平坦区域用大块、细节区域用小块」之间自由切换。这比H.264一刀切的16x16宏块聪明太多了。
1.2 HEVC标准的核心优势
我在项目中遇到过不少团队,觉得H.265就是「H.264的升级版」,直接拿x264的参数改改就跑x265。结果画质一塌糊涂。为什么?因为没理解HEVC的几个关键设计。
1. 四叉树分块结构
这是HEVC最革命性的变化。一个64x64的CTU,可以递归分成4个32x32,每个32x32又可以继续分下去,直到8x8。这种结构让编码器能根据图像内容自适应选择块大小。我个人习惯把这种结构叫做「编码界的乐高」—— 想搭大块还是小块,随你。
2. 更精细的帧内预测
H.264只有9种帧内预测模式,HEVC直接干到35种。多了33个角度方向。你想想看,对于那种有斜线、纹理的画面,角度越多,预测越准,残差越小,码率自然就下来了。
3. 并行编码能力
H.265引入了Tile和WPP(波前并行处理)。Tile可以把画面切成矩形区域独立编码,WPP则让每一行CTU可以跟上一行并行处理。这在多核CPU上简直是福音。我记得第一次在16核服务器上跑x265,开了WPP,编码速度直接翻了8倍。
4. SAO(样点自适应补偿)
这个很多人容易忽略。SAO是在去块滤波之后再加一层处理,专门补偿像素的偏移。说白了,就是让画面边缘更平滑,减少振铃效应。对于低码率场景,SAO能明显提升主观画质。
避坑指南: 我曾经在直播场景中关闭了SAO,想着省点性能。结果画面边缘出现了明显的「鬼影」。后来老老实实把SAO打开,画质立马正常了。所以,除非你极度缺算力,否则别关SAO。
1.3 编码器生态:x265、NVENC、MediaCodec
标准归标准,落地还得看编码器。目前主流的H.265编码器有三类,我挨个说说我的使用感受。
x265:软件编码的王者
x265是开源社区最成熟的HEVC编码器。它基于C++实现,支持几乎所有HEVC特性。我平时做离线转码,首选就是x265。
- 优点: 参数极其丰富,调优空间大;画质上限高;跨平台
- 缺点: 慢!非常慢!实时编码基本别想
- 适用场景: 离线转码、视频点播、存档
举个例子,我常用的x265参数长这样:
ffmpeg -i input.mp4 -c:v libx265 \
-preset medium \
-crf 23 \
-x265-params "aq-mode=3:no-sao=0:bframes=8" \
output.mp4
这里的aq-mode=3是自适应量化,对暗场景特别友好。bframes=8则能提升压缩率,但会增加编码延迟。
NVENC:硬件编码的速度担当
NVIDIA从GTX 900系列开始支持HEVC硬件编码。NVENC的速度快得离谱,但画质嘛…… 嗯,只能说够用。
- 优点: 极快,延迟低;功耗低;支持多路并行
- 缺点: 画质不如x265;参数可调范围小;受GPU型号影响大
- 适用场景: 直播、实时通信、游戏录制
注意: NVENC的HEVC编码质量在不同代GPU上差异很大。Turing架构(RTX 20系列)之后的NVENC质量明显提升,但跟x265的veryslow preset比,还是有差距。如果你对画质要求高,别指望NVENC能替代x265。
MediaCodec:移动端的标配
Android从5.0开始通过MediaCodec API支持HEVC硬件编码。iOS这边,VideoToolbox也早就支持了。移动端编码器的特点是:省电、够用、参数少。
- 优点: 硬件加速,功耗低;集成在系统中,调用方便
- 缺点: 参数控制能力弱;不同手机厂商实现差异大
- 适用场景: 手机录像、短视频App、视频通话
我在做移动端视频SDK时,遇到过一个问题:同一段视频,在骁龙芯片上编码质量不错,换到联发科芯片上就出现色块。后来发现是MediaCodec的BITRATE_MODE参数没对齐。所以,移动端编码一定要做机型适配测试。
1.4 知识体系总览
下面这张图,是我梳理的本章知识结构。你可以把它当作后续学习的「地图」。
这张图把本章的三个核心模块串起来了。从左到右,分别是「演进背景」、「核心优势」、「编码器生态」。你会发现,这三个模块其实是递进关系:先知道H.265为什么出现,再理解它强在哪,最后看怎么落地。
我的建议: 如果你是初学者,先别急着调参数。把CTU、四叉树、SAO这几个概念吃透,后面调参才能有的放矢。我见过太多人一上来就调--no-sao、--aq-mode,结果连这些参数是干什么的都不知道,纯粹瞎蒙。
好了,第一章就聊到这儿。记住一句话:H.265不是H.264的简单升级,而是一次彻底的架构重构。后面的章节,我们会深入每个参数的细节,手把手教你调出高质量的H.265编码流。