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/HEVC 编码知识体系(第1章) H.265/HEVC 标准 从H.264到H.265 CTU vs 宏块 预测模式增加 并行能力提升 核心优势 四叉树分块结构 35种帧内预测 Tile + WPP 并行 SAO 样点自适应补偿 编码器生态 x265(软件,高画质) NVENC(硬件,低延迟) MediaCodec(移动端) 选择编码器 = 在画质、速度、功耗之间做权衡

这张图把本章的三个核心模块串起来了。从左到右,分别是「演进背景」、「核心优势」、「编码器生态」。你会发现,这三个模块其实是递进关系:先知道H.265为什么出现,再理解它强在哪,最后看怎么落地。

我的建议: 如果你是初学者,先别急着调参数。把CTU、四叉树、SAO这几个概念吃透,后面调参才能有的放矢。我见过太多人一上来就调--no-sao、--aq-mode,结果连这些参数是干什么的都不知道,纯粹瞎蒙。

好了,第一章就聊到这儿。记住一句话:H.265不是H.264的简单升级,而是一次彻底的架构重构。后面的章节,我们会深入每个参数的细节,手把手教你调出高质量的H.265编码流。