视频编解码Codec选型指南:H.264 vs H.265 vs AV1

从一场关于带宽的抉择说起

项目中需要在有限带宽下传输1080p@60fps视频。H.264跑不动,H.265有专利费,AV1编码太慢。这不是简单的"哪个好"的问题,而是一道涉及压缩效率、计算成本、生态成熟度和专利风险的多元方程。

这篇文章从编码原理出发,把三者的技术内核拆开,然后落到工程选型的实际考量上。


1. 宏观演进:为什么需要新一代Codec?

视频压缩的本质是做三件事:去掉空间冗余去掉时间冗余去掉视觉冗余

预测模块

帧内

帧间

原始视频
海量数据

预测

空间预测

时间预测

残差数据

变换 + 量化

熵编码

压缩码流

每一代Codec都在上述三个环节上做了更精细的划分和更高效的算法。下面这张表直观展示三代的压缩效率差距:

Codec相对于H.264码率节省发布年份标准化组织
H.264/AVC基准线2003ITU-T VCEG + ISO MPEG
H.265/HEVC~50%2013ITU-T VCEG + ISO MPEG (JCT-VC)
AV1~30%(vs H.265) ~65%(vs H.264)2018Alliance for Open Media

但"码率节省"四个字背后,是编码复杂度成倍增长。拿个具体数字:在软件编码场景下,AV1的编码耗时大约是H.265的3-5倍,H.264的10-20倍。


2. 编码块结构:从宏块到CTU再到Superblock

2.1 H.264:16x16宏块的天下

H.264把每帧图像分成若干个16x16的宏块(Macroblock, MB) ,这是最基本的处理单元。
在这里插入图片描述

每个宏块可以进一步划分成更小的子块做运动补偿:

  • 帧间预测:16x16, 16x8, 8x16, 8x8, 8x4, 4x8, 4x4
  • 帧内预测:16x16 (4种模式), 8x8 (9种), 4x4 (9种)

H.264支持最多 16个参考帧,运动矢量精度达到 1/4像素

2.2 H.265:从宏块到CTU + CU/PU/TU三层划分

H.265抛弃了固定16x16的宏块概念,引入了编码树单元(CTU, Coding Tree Unit) ,尺寸最大可达64x64。

每个CTU通过四叉树递归划分成编码单元(CU)

在这里插入图片描述

每个CU再分成预测单元(PU) (运动补偿的粒度)和变换单元(TU) (DCT变换的粒度)。CU/PU/TU三层分离是H.265的核心设计之一。

H.265的帧内预测从H.264的9种扩展到 33种角度模式 + DC + Planar = 35种

2.3 AV1:更灵活的块划分

AV1吸收了两者的经验,块划分自由度更高。最小4x4,最大128x128的Superblock

AV1块划分的10种递归模式:

   PARTITION_NONE    PARTITION_HORZ    PARTITION_VERT   PARTITION_SPLIT
   ┌─────────┐      ┌─────────┐       ┌────┬────┐      ┌────┬────┐
   │         │      │         │       │    │    │      │    │    │
   │         │      ├─────────┤       │    │    │      ├────┼────┤
   │         │      │         │       │    │    │      │    │    │
   └─────────┘      └─────────┘       └────┴────┘      └────┴────┘

   PARTITION_HORZ_4  ... 以及AB型划分 (T/4 + 3T/4)

AV1还引入了非对称划分(AB partition) ,允许64x64的块划分为16x64 + 48x64,对运动边界有更好的适配性。


3. 帧内预测:从H.264到AV1的精度进化

帧内预测利用同一帧中已编码的相邻像素来预测当前块。

H.264帧内预测(以4x4块为例)

9种预测模式,每种方向不同:

模式0(垂直):    模式1(水平):    模式2(DC):     模式3(左下对角线):
A B C D E F G   I             平均(A~D,     A B C D E F G
I J K L M N O   J             I~L)           J K L M N O
...             K                            ...
                L

预测公式简单直接——复制相邻像素值。

H.265帧内预测:33角度 + 滤波

33种角度模式覆盖了从-32到32的精细方向:

               18 19 20 21 22 23 24 25 26
            17                             27
         16                                   28
      15                                         29
   14                                              30
13                                                   31
   12                                              32
      11                                         33
         10                                   34
            9                              2(DC)
               8                         Planar
                  7  6  5  4  3

Planar模式生成平滑渐变,DC模式填充平均值。对相邻参考像素做强滤波和弱滤波处理,减少块效应。

AV1帧内预测:方向 + 递归

AV1将帧内预测模式扩展到 56种方向 + 5种非方向模式。这里的创新是:

  1. Recursive filtering:预测像素不仅依赖于边界,还依赖于同块内已预测的像素
  2. Paeth预测器:从三个相邻像素中取最接近趋势的一个
  3. Chroma from Luma (CfL) :用亮度分量做色度预测
// AV1 CfL预测的简化示意
// 利用亮度(Y)重建值预测色度(U/V)
// 1. 计算亮度子采样区域的平均值
// 2. 对亮度做线性缩放
// 3. 加上色度DC偏移

cfl_prediction[y][x] = alpha * luma_ac[y][x] + dc_offset;

// alpha 是编码端选择的缩放因子,有16种可能

4. 帧间预测与运动补偿:MV精度和参考帧管理

运动估计的基本流程

当前帧块

参考帧搜索窗口

匹配准则
SAD/SATD/MSE

找到最佳运动矢量MV

计算残差 = 当前块 - 参考块

对残差做变换+量化+熵编码

编码MV差值MVD = MV - 预测MV

精度演进

CodecMV精度参考帧数运动补偿插值滤波器
H.2641/4像素(luma), 1/8(chroma)最多166-tap Wiener + bilinear
H.2651/4像素(luma), 1/8(chroma)最多16(DPB + 2个参考帧列表)8-tap DCTIF + 4-tap平滑
AV11/8像素(luma)最多8个参考帧(全局/复合)可选的2/4/6/8-tap滤波器 + Wiener + SGR

AV1的 1/8像素精度 使运动补偿更精细,但代价是插值计算量大幅上升。

复合参考帧预测

AV1的一个关键创新是复合预测(Compound Prediction) ——用两个参考帧做加权平均预测:

AV1 复合预测 (Compound Prediction)

当前块

参考帧 0
前向

参考帧 1
后向

加权平均
Weighting/Masking

预测块

传统方式 (I/P 帧)

单向预测

参考帧

当前块

加权系数可以逐像素变化(基于距离),也可以在整个块上统一。这让运动遮挡、渐变场景的编码效率明显提升。


5. 变换与量化:DCT/DST + 更细粒度的量化控制

H.264:4x4整数DCT

H.264用整数DCT近似变换,避免了浮点精度问题:

变换矩阵 H:
[ 1,  1,  1,  1]
[ 2,  1, -1, -2]
[ 1, -1, -1,  1]
[ 1, -2,  2, -1]

正变换: Y = H × X × H^T
量化:   Z = round(Y / Qstep)

量化步长Qstep在52个层级(QP 0~51)中按指数增长:Qstep ≈ 0.625 × 2^(QP/6)

QP每增加6,码率减半(大致上)。

H.265:更大规模的DCT + 4x4 DST

H.265支持 4x4, 8x8, 16x16, 32x32 四种DCT变换。

对于4x4帧内预测残差,使用离散正弦变换(DST) 代替DCT——因为帧内预测的残差向边界方向逐渐增大,DST能更好地能量集中:

4x4 DST 变换矩阵 (H.265):
[ 29,  55,  74,  84]
[ 74,  74,   0, -74]
[ 84, -29, -74,  55]
[ 55, -74,  29, -29]
// 经过缩放和取整的整数近似

AV1:更灵活的变换集

AV1支持 16种变换组合(包括DCT/DST/ADST/FlipADST/IDTX),Txfm_size从4x4到64x64。

ADST(非对称DST) 对于帧内预测残差不均匀分布的场景效果更好。Identity Transform (IDTX) 跳过变换——对某些纹理丰富区域,不变换直接编码残差反而更好。

// AV1变换选择的简化逻辑
// 对每个变换单元,尝试多种变换组合,选RD-cost最小的
// 实际编码器中用快速决策算法而不是全搜索

enum TxType {
    DCT_DCT,       // DCT行 + DCT列
    ADST_DCT,      // ADST行 + DCT列  
    DCT_ADST,      // DCT行 + ADST列
    ADST_ADST,     // ADST行 + ADST列
    FLIPADST_DCT,
    DCT_FLIPADST,
    FLIPADST_FLIPADST,
    ADST_FLIPADST,
    FLIPADST_ADST,
    IDTX,          // 跳过变换
    V_DCT,         // DCT行 + IDT列
    H_DCT,         // IDT行 + DCT列
    V_ADST,
    H_ADST,
    V_FLIPADST,
    H_FLIPADST
};

6. 环路滤波:去块效应 + SAO + CDEF + LR

压缩产生的块效应和振铃是视觉质量的主要杀手。

H.264:Deblocking Filter

H.264的去块效应滤波器(DBF)在4x4块边界上做自适应滤波。根据块类型和运动矢量差异选择滤波强度。

边界强度(BS) = 0~4:
  BS=0: 不滤波(两个块非常相似)
  BS=1: 弱滤波(参考帧不同但残差小)
  BS=2: 中滤波(参考帧不同)
  BS=3: 强滤波(帧内编码块)
  BS=4: 最强滤波(帧内编码且边界在宏块边界)

滤波过程对边界两侧的2~3个像素做修正

H.265:DBF + SAO

H.265在DBF之后增加了样点自适应补偿(SAO, Sample Adaptive Offset) 。SAO有两种模式:

  1. EO (Edge Offset) :根据当前像素与相邻像素的关系分4类,每类加一个偏移量
  2. BO (Band Offset) :将像素值范围(0~255)分成32个band,对特定band的像素加偏移

SAO对平坦区域的振铃噪声改善非常明显。

AV1:DBF + CDEF + LR 三重滤波

AV1的环路滤波分三步:

  1. DBF → 与H.265类似的去块效应
  2. CDEF (Constrained Directional Enhancement Filter) → 方向性降噪
// CDEF 核心逻辑
// 1. 检测边缘方向(8个方向之一)
// 2. 沿边缘方向做低通滤波(保护边缘)
// 3. 垂直边缘方向做高通滤波(去除噪声)
// 滤波强度由编码器自适应决定

int direction = find_direction(block, 8);  // 8方向检测
for each pixel p in block:
    float primary = filter_primary(p, direction, strength_pri);
    float secondary = filter_secondary(p, direction, strength_sec);
    p = clip(p + primary + secondary, 0, 255);
  1. LR (Loop Restoration) → 维纳滤波器或自导滤波,恢复高频细节。以64x64/128x128为单位,选择Wiener或SGRPROJ滤波器。

LR是AV1在主观质量上超越H.265的关键之一


7. 熵编码:CABAC统一天下

Codec熵编码特点
H.264CAVLC(基线) + CABAC(主档次)CABAC比CAVLC节省10-15%码率
H.265CABAC only上下文模型更精确,概率更新自适应
AV1多符号算术编码(Multi-symbol Arithmetic Coding)支持3-5个符号的联合编码,非二元

H.265的CABAC相比H.264,上下文模型数量从约460个增加到约1200个。上下文越精确,概率预测越准,压缩率越高。

AV1的多符号算术编码允许一次处理多个符号(例如一次编码[0, 1, 2, 3]而不是逐bit编码),减少了算术编码器的调用次数,而且压缩率更高。


8. 工程选型实战

场景1:直播(低延迟场景)

需求推荐Codec理由
延迟 < 200msH.264编码器成熟、硬件编码器几乎全平台支持
有带宽预算H.26550%码率节省,移动端硬解已普及
极致画质/低码率AV1Netflix旗舰画质流,但编码延迟不可控

直播推荐组合:

  • 软件编码:x264 medium preset / x265 medium preset
  • 硬件编码:NVENC H.264 (P5/P6) / QSV H.265
  • 避免在直播场景用AV1软件编码,延迟太大

场景2:点播(VOD场景)

VOD编码Pipeline示例:

原始文件(ProRes/DNxHD)
    │
    ├── H.264 基准版 (1080p, 5Mbps) → 老设备兼容
    ├── H.265 主版 (1080p, 3Mbps)  → 主流观看  
    └── AV1 旗舰版 (1080p, 1.5Mbps) → 带宽优化

每个版本分4-6个码率档次,HLS/DASH自适应流

场景3:嵌入式/硬件受限

平台Codec参考实现
ARM Cortex-A系列H.264/H.265硬件MFC/VideoCore编码器
RISC-VH.264软件编码,实时720p@30fps是上限
FPGA取决于逻辑门数通常H.264 Baseline
DSPH.264TI C66x等

编码器调参经验

x264关键参数(按重要性排序):

# 高质量VOD编码
x264 --preset slower \
      --crf 18 \
      --profile high \
      --level 4.1 \
      --ref 8 \
      --bframes 8 \
      --b-adapt 2 \
      --direct auto \
      --me umh \
      --subme 10 \
      --trellis 2 \
      --aq-mode 3 \
      --aq-strength 0.8 \
      --deblock -2:-2 \
      -o output.h264 input.y4m

# 直播编码(低延迟)
x264 --preset veryfast \
      --tune zerolatency \
      --crf 22 \
      --profile baseline \
      --bframes 0 \
      --sync-lookahead 0 \
      --rc-lookahead 0 \
      -o output.h264 input.y4m

CRF vs CBR vs VBR:

CRF (Constant Rate Factor): 
  - 固定质量,可变码率
  - 最适合VOD
  - 值越低质量越高:18 ≈ 视觉无损,23 ≈ 良好,28 ≈ 可接受

CBR (Constant Bitrate):
  - 固定码率,质量波动
  - 直播强制要求
  - 过大导致垃圾数据填充(padding),过小导致画质崩溃

VBR (Variable Bitrate):
  - 设定目标码率但允许波动
  - 折中方案
  - * 2-pass VBR是VOD的最佳码率控制模式

9. 专利与许可:工程选型不能回避的问题

这个现实问题会影响选型决策:

H.264 (AVC):
  - MPEG LA专利池
  - 大部分设备已预交专利费(电视、手机、GPU)
  - 互联网分发需要单独考虑(但大部分情况设备端已解决)

H.265 (HEVC):
  - 多个专利池:MPEG LA, HEVC Advance, Velos Media
  - 专利费高于H.264
  - 这是阻碍H.265大规模替代H.264的主要原因之一

AV1:
  - 开源免专利费(AOM成员贡献的专利不可追溯)
  - Cisco/Google/Netflix/Mozilla等支持
  - AOM成员可以使用专利库中的专利抵抗非成员的专利诉讼
  - * 注意:Sisvel等非AOM成员可能持有相关专利

实际建议:

  • 终端产品(硬件):H.264最安全
  • 服务端编码(软件):AV1是长期趋势,短期先用H.265过渡
  • 如果产品面向海外:特别关注H.265专利风险(HEVC Advance的费率)

总结

产品落地策略建议

选择视频编解码器 Codec

强制 H.264 兼容?

H.264
没商量

嵌入式 / 实时 / 直播?

H.264
延迟低 / 硬件编码生态成熟

需要 HDR / 4K / 8K?

追求极致压缩
且带宽严重受限?

H.264

AV1
压缩率极高 / 编码成本高

H.265
生态健全 / 硬件解码支持好

成熟产品: H.264 为主, H.265 为辅, AV1 做技术储备

新一代产品: 直接押注 AV1
通过 aomenc / libaom 落地

没有任何Codec是银弹。H.264靠生态和成熟度统治,H.265在带宽和画质的平衡点上最优,AV1代表了免专利费和高压缩率的方向。工程选型的核心是在你的具体约束条件下找到最优解——不是技术最先进的那个,而是最"够用"的那个。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐