前言
这篇文章将深度探讨 H.264(也称为 AVC)、H.265(也称为 HEVC) 以及它们的区别。H.264、H.265 都属于视频编解码器,而视频编解码器在我们的日常生活中无处不在,电视直播、去电影院看的电影、手机的抖音小红书 App 等等。它的出现彻底改变了我们的生活,影响着我们的方方面面。
视频编解码器
视频编解码器是一种工具,用于压缩视频文件以便于存储和传输,同时视频质量几乎不变。编解码器被用于各种视频设备、数字媒体应用和视频编辑软件中。
视频由许多单独的图像组成。我们以单张图像为例。如果你想查看分辨率为 1920x1080 的高清图像,你将需要总共 1920 x 1080 x 8 x 3 比特。这里,1920x1080 表示像素数量,3 表示 RGB 值,8 bits 表示每个像素值的大小。因此,对于一张图像,总大小约为 47MB。如果我们观看一个 30 帧(FPS)的视频,那么一秒就需要 30帧 × 47MB 大小的图像,约等于 1.4GB 的带宽。
而视频编解码器的作用是利用各种算法,在保证视频质量不变的情况下,将视频大小进行大幅压缩。因此,如果没有编解码器,我们传输音视频的成本将大大增加,而抖音、小红书、b站这些依赖音视频的产品也不可能发展起来。可以看出,编解码器对我们的日常生活起着举足轻重的重要。
下面这张图是目前各个视频编解码器的发展历程:
可以看到,H.264 距离发布已经有 22 年了,而 H.265 也有 12年了,最近势头很猛的 AV1 则是在 2018 年发布的。如果 H.265 专利许可的问题无法解决,或许未来 AV1 将取代 H.265 成为新的视频编解码行业标准。AV1 有着开源、免费、高压缩率的特点,历史或将重蹈覆辙(MPEG-4 因专利许可问题而被 H.264 取代)。
H.264
定义
毫无疑问,H.264 现在仍是当今世界最流行的视频编解码器。它已经渗透到各个行业中,改变着我们的生活。
H.264,也称为高级视频编码(AVC),是一种广泛使用的视频编解码器,于 2003 年推出。由视频编码专家组(VCEG)和动态图像专家组(MPEG)联合开发,旨在实现高视频压缩效率的同时保持图像质量。它因能以低比特率提供高质量视频而受到流媒体服务的欢迎。
H.264 通过使用先进的熵编码和压缩技术实现了高效的结果,包括帧内和帧间预测、上下文自适应二进制算术编码(CABAC)、宏块表示(每个 16 x 16 像素)以及通过预测帧间运动来减少数据冗余的运动补偿。

工作原理
- 视频分帧与分块
- 帧分割:首先,H.264会将原始视频按帧(frame)进行分割,每一帧会进一步划分成小的块。
- 宏块(Macroblock):每一帧被划分为16x16像素的宏块,宏块是H.264编码的基本单元,宏块的处理是压缩过程中关键的一步。
- 预测(Prediction)
- 帧内预测(Intra Prediction):对于一个帧内的宏块,H.264会通过使用周围已编码区域的信息(像素的上下文关系)来预测该宏块的内容。帧内预测通常用于I帧(关键帧)。
- 帧间预测(Inter Prediction):对于视频中的连续帧,H.264会利用前一帧的已编码数据来预测当前帧的宏块内容。通过运动补偿(motion compensation)技术,计算宏块在前一帧中的最佳位置,进行预测。
- 变换(Transformation)
- 对预测误差(残差,residual)进行离散余弦变换(DCT),将空间域的像素值转化为频域的系数。这一步有助于减少数据的冗余性。
- 变换后的系数会存储并进一步量化。
- 量化(Quantization)
- 对变换后的系数进行量化处理。量化会丢失一些精确度,但会大幅减少数据量。量化的强度决定了压缩率与图像质量之间的权衡。
- 编码(Entropy Coding)
- 对量化后的系数使用熵编码(如CABAC或CAVLC)进行进一步压缩。熵编码是一种无损编码方法,能够根据数据出现的概率进行编码,频繁出现的数据用较短的码字表示,罕见的数据用较长的码字表示,从而达到压缩目的。
- 输出编码流
- 将编码后的数据生成最终的视频比特流(bitstream)。比特流包括帧内预测、帧间预测、变换系数、量化参数、运动向量等信息。
- 编码过程会生成不同类型的帧:I帧(关键帧)、P帧(前向预测帧)和B帧(双向预测帧),它们通过不同的方式记录视频帧的差异。
- 解码过程
- 解码过程大致是编码过程的逆过程。首先,解码器解析视频比特流,然后执行熵解码、逆量化、逆变换等步骤,最终重构出原始视频帧。


Profile
配置文件的主要作用是平衡编码复杂度和压缩效率,确保在不同的设备和应用中都能有效地使用编码标准。
H.264 的常见 Profile 有如下:
- Baseline Profile:这是最简单的配置文件,主要用于低功耗、低成本设备,包括一些视频会议和移动应用。Baseline 配置文件可实现约 1000:1 的压缩比——即 1 Gbps 的流可以压缩到约 1 Mbps。它采用 4:2:0 色度采样,这意味着彩色信息在垂直和水平分辨率上都是黑白信息的一半。Baseline Profile 的其他重要特性包括使用通用可变长度编码(UVLC)(Universal Variable Length Coding)和上下文自适应可变长度编码(CAVLC)(Context Adaptive Variable Length Coding)熵编码技术。
- Main Profile:Main Profile 文件包含了 Baseline Profile 的所有功能,并对帧预测算法进行了改进。它用于采用 MPEG-4 格式的标清数字电视广播,但不适用于高清广播。
- High Profile:H.264 High Profile 是 H.264 系列中最高效、最强大的配置文件,是广播和光盘存储(尤其是 HDTV 和蓝光光盘存储格式)的主要配置文件。它能实现约 2000:1 的压缩比。High Profile 还采用了自适应变换,能够在 4x4 或 8x8 像素块之间进行选择。例如,对于细节密集的图像部分使用 4x4 块,而对于细节较少的部分则使用 8x8 块进行压缩。这样既保留了视频图像质量,又可将网络带宽需求减少多达 50%。通过应用 H.264 High Profile 压缩,1 Gbps 的流可以压缩至约 512 Kbps。
下表给出各个 Profile 的对比:
配置文件 | Constrained Baseline Profile(CBP) | Baseline Profile(BP) | Extended Profile(XP) | Main Profile(MP) | ProHiP | High Profile(HiP) | High 10 Profile(Hi10P) | High 4:2:2 Profile(Hi422P) | High 4:4:4 Predictive Profile(Hi444PP) |
---|---|---|---|---|---|---|---|---|---|
位深度(每样本) | 8 | 8 | 8 | 8 | 8 | 8 | 8 to 10 | 8 to 10 | 8 to 14 |
色度格式 | 4:2:0 | 4:2:0 | 4:2:0 | 4:2:0 | 4:2:0 | 4:2:0 | 4:2:0 | 4:2:0/ 4:2:2 | 4:2:0/ 4:2:2/ 4:4:4 |
灵活的宏块排序(FMO) | No | Yes | Yes | No | No | No | No | No | No |
任意切片排序(ASO) | No | Yes | Yes | No | No | No | No | No | No |
冗余切片(RS) | No | Yes | Yes | No | No | No | No | No | No |
数据分区 | No | No | Yes | No | No | No | No | No | No |
SI和SP切片 | No | No | Yes | No | No | No | No | No | No |
交错编码(PicAFF,MBAFF) | No | No | Yes | Yes | No | Yes | Yes | Yes | Yes |
B slices | No | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
CABAC熵编码 | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes |
4:0:0(单色) | No | No | No | No | Yes | Yes | Yes | Yes | Yes |
8×8与4×4 变换自适应性 | No | No | No | No | Yes | Yes | Yes | Yes | Yes |
量化缩放矩阵 | No | No | No | No | Yes | Yes | Yes | Yes | Yes |
独立的CB和CR QP 控制 | No | No | No | No | Yes | Yes | Yes | Yes | Yes |
分离色彩平面编码 | No | No | No | No | No | No | No | No | Yes |
预测无损编码 | No | No | No | No | No | No | No | No | Yes |
Level
Level 定义了编码器的性能约束参数,包括:
- 最大分辨率
- 最大码率
- 最大帧率
- 解码器缓冲区大小
- 每秒最大宏块处理数等
下表给出 H.264 的 Level 对比
Level | 最大解码速度(宏块/秒) | 最大 frame size(宏块) | 视频编码层(VCL)的最大视频比特率(受限基线、基线、扩展和主配置文件)(千比特/秒) | 高分辨率下最高帧率示例(最大存储帧数) |
---|---|---|---|---|
1 | 1,485 | 99 | 64 kb/s | 128×96 @30.9 176×144 @15.0 |
1b | 1,485 | 99 | 128 kb/s | 128×96 @30.9 176×144 @15.0 |
1.1 | 3,000 | 396 | 192 kb/s | 176×144 @30.3 320×240 @10.0 352×288 @7.5 |
1.2 | 6,000 | 396 | 384 kb/s | 320×240 @20.0 352×288 @15.2 |
1.3 | 11,880 | 396 | 768 kb/s | 320×240 @36.0 352×288 @30.0 |
2 | 11,880 | 396 | 2,000 kb/s | 320×240 @36.0 352×288 @30.0 |
2.1 | 19,800 | 792 | 4,000 kb/s | 352×480 @30.0 352×576 @25.0 |
2.2 | 20,250 | 1,620 | 4,000 kb/s | 352×480 @30.7 352×576 @25.6 720×480 @15.0 720×576 @12.5 |
3 | 40,500 | 1,620 | 10,000 kb/s | 352×480 @61.4 352×576 @51.1 720×480 @30.0 720×576 @25.0 |
3.1 | 108,000 | 3,600 | 14,000 kb/s | 720×480 @80.0 720×576 @66.7 1,280×720 @30.0 |
3.2 | 216,000 | 5,120 | 20,000 kb/s | 1,280×720 @60.0 1,280×1,024 @42.2 |
4 | 245,760 | 8,192 | 20,000 kb/s | 1,280×720 @68.3 1,920×1,080 @30.1 2,048×1,024 @30.0 |
4.1 | 245,760 | 8,192 | 50,000 kb/s | 1,280×720 @68.3 1,920×1,080 @30.1 2,048×1,024 @30.0 |
4.2 | 522,240 | 8,704 | 50,000 kb/s | 1,280×720 @145.1 1,920×1,080 @64.0 2,048×1,080 @60.0 |
5 | 589,824 | 22,080 | 135,000 kb/s | 1,920×1,080 @72.3 2,048×1,024 @72.0 2,048×1,080 @67.8 2,560×1,920 @30.7 3,672×1,536 @26.7 |
5.1 | 983,040 | 36,864 | 240,000 kb/s | 1,920×1,080 @120.5 2,560×1,920 @51.2 3,840×2,160 @31.7 4,096×2,048 @30.0 4,096×2,160 @28.5 4,096×2,304 @26.7 |
5.2 | 2,073,600 | 36,864 | 240,000 kb/s | 1,920×1,080 @172.0 2,560×1,920 @108.0 3,840×2,160 @66.8 4,096×2,048 @63.3 4,096×2,160 @60.0 4,096×2,304 @56.3 |
6 | 4,177,920 | 139,264 | 240,000 kb/s | 3,840×2,160 @128.9 7,680×4,320 @32.2 8,192×4,320 @30.2 |
6.1 | 8,355,840 | 139,264 | 480,000 kb/s | 3,840×2,160 @257.9 7,680×4,320 @64.5 8,192×4,320 @60.4 |
6.2 | 16,711,680 | 139,264 | 800,000 kb/s | 3,840×2,160 @300.0 7,680×4,320 @128.9 8,192×4,320 @120.9 |
优点
- 广泛采用:几乎所有设备和平台都支持。
- 成熟技术:经过充分验证并针对各种应用进行了优化。
- 低处理能力需求:在较旧和性能较低的设备上也能流畅运行。。
缺点
- 与 H.265 相比压缩效率较低:在相似视频质量下需要更高的比特率。
- 对更高分辨率的支持有限:主要设计用于最高 4K 的分辨率。
H.265
定义
H.265(HEVC,High Efficiency Video Coding,高效视频编码)于 2013 年推出,旨在在 H.264 基础上,提供更高的压缩率和更大的分辨率,目前 H.265 最大支持 16k 编解码,压缩后的大小是 H.264 的一半左右。
工作原理
- 视频分帧与分块
- 帧分割:与H.264类似,H.265也将视频分割为一帧一帧进行处理。
- CU(Coding Unit)和PU(Prediction Unit):H.265引入了更灵活的分块结构。H.265将每一帧分为多个CU,每个CU可以进一步划分成不同尺寸的预测单元(PU)和变换单元(TU)。这些单元的尺寸可以是8x8、16x16、32x32,甚至更大,以适应不同内容的压缩需求。
- 预测(Prediction)
- 帧内预测(Intra Prediction):H.265在帧内预测中支持更多的预测方向,相较于H.264的8种预测模式,H.265支持33种预测方向,提供了更精细的预测能力。
- 帧间预测(Inter Prediction):H.265与H.264一样,通过运动估计和运动补偿来利用相邻帧的信息进行预测。但H.265在帧间预测中采用了更加灵活的块划分和运动补偿方式。
- 运动向量:H.265支持更精细的运动估计,允许更小的运动单位,从而进一步提高压缩效率。
- 多参考帧:H.265能够使用多个参考帧(而H.264通常只使用一个),这在处理复杂场景时能提高预测的准确性。
- 变换(Transformation)
- 离散余弦变换(DCT):与H.264类似,H.265也使用DCT对预测残差进行变换。
- 变换单元(TU):H.265可以根据需要选择不同大小的变换单元(如4x4、8x8、16x16),而H.264的变换块是固定的16x16。这个灵活性使得H.265在编码时能够根据视频内容调整最合适的变换单元,达到更好的压缩效果。
- 量化(Quantization)
- 量化:H.265也使用量化来减少变换系数的精度,从而压缩数据。H.265的量化过程支持更多的调整,使得视频在不同压缩率下的质量更加均衡。
- 自适应量化:H.265引入了自适应量化方法,能够根据视频内容动态调整量化参数,从而实现更高的压缩效率。
- 熵编码(Entropy Coding)
- CABAC(Context-Adaptive Binary Arithmetic Coding):H.265采用了与H.264相同的CABAC(上下文自适应二进制算术编码)作为熵编码技术,它能更高效地表示视频数据,并减少比特流的大小。
- CABAC增强:H.265中的CABAC有一些增强特性,提高了编码效率,尤其是在处理较复杂视频内容时。
- 循环滤波(Loop Filtering)
- 去块效应滤波(Deblocking Filter):H.265在编码和解码过程中,应用去块效应滤波来减少块效应(blockiness),这有助于提高视频质量。
- 样本自适应偏移(SAO):H.265引入了SAO技术,可以进一步去除编码过程中产生的伪影和噪点,使视频质量更加平滑。
- 输出编码流
- 将处理后的数据生成最终的比特流。比特流包含了所有预测模式、变换系数、运动向量、量化参数、熵编码等信息。H.265的比特流结构相比H.264有一定优化,能更好地适应不同的网络环境和存储设备。
- 解码过程
- 解码过程与编码过程相反,解码器根据编码流中的信息,执行熵解码、逆量化、逆变换等步骤,重建出原始的视频帧。


Profile
主要的配置文件包括:
- Main Profile(主配置文件)
- Main 10 Profile
- Main Still Picture Profile
- Range Extension Profiles
配置文件 | 支持色深 | 支持分辨率和帧率 | 特性 | 适用场景 |
---|---|---|---|---|
Main Profile | 8位色深 | 支持高清和超高清(HD/UHD) | 基本的视频编码,适用于大多数常见应用 | 视频流媒体、广播电视、在线视频、视频会议等 |
Main 10 Profile | 10位色深 | 支持高清和超高清(HD/UHD) | 支持10位色深和高动态范围(HDR) | 4K视频、HDR内容、专业视频处理、电影后期制作等 |
Main Still Picture Profile | 不适用 | 不适用 | 专为静态图像压缩设计,无运动估计和帧间预测 | 高分辨率静态图像压缩,如数字相机或扫描仪应用 |
Range Extension Profiles | 支持扩展色深(10/12位) | 支持HDR和WCG等扩展特性 | 支持高动态范围、高色深、宽色域等扩展应用 | 专业影像、4K/8K视频、HDR、WCG视频内容等 |
Level
下面这个表是简化版
Level | Picture Size | FPS |
---|---|---|
1 | 176 × 144 | 15.0 |
2 | 352 × 288 | 30.0 |
2.1 | 640 × 360 | 30.0 |
3 | 960 × 540 | 30.0 |
3.1 | 1280 × 720 | 33.7 |
4 | 2048 × 1080 | 30.0 |
4.1 | 2048 × 1080 | 60.0 |
5 | 4096 × 2160 | 30.0 |
5.1 | 4096 × 2160 | 60.0 |
5.2 | 4096 × 2160 | 120. |
6 | 8192 × 4320 | 30.0 |
6.1 | 8192 × 4320 | 60.0 |
6.2 | 8192 × 4320 | 120.0 |
6.3 | 12288 x 6480 | 60.0 |
7 | 16384 x 8640 | 34.0 |
7.1 | 16384 x 8640 | 60.4 |
7.2 | 16384 x 8640 | 120.8 |
下面这个表是深度对比版
Level | 最大亮度采样率(样本/秒) | 最大亮度图像尺寸 (samples) |
最大比特率 for Main and Main 10 profiles (1000bit/s) |
最大比特率 for Main 12 profile (1000bit/s) |
最大比特率 for Main 4:4:4 12 profile (1000bit/s) |
最大比特率 for Main 4:4:4 16 Intra profile (1000bit/s) |
最大比特率 for High Throughput 4:4:4 16 Intra profile (1000bit/s) |
示例图片分辨率 @ 最高帧率 (最大解码图片缓冲区大小) |
最小压缩比 MinCR | 每张图片的最大切片段数 (指在最高分辨率和最高帧率下,每幅图片允许的切片数量。) | 每张图片允许的最大 tile 数 | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Main tier | High tier | Main tier | High tier | Main tier | High tier | Main tier | High tier | Main tier | High tier | rows | columns | ||||||
1 | 552,960 | 36,864 | 128 | - | 192 | - | 384 | - | 1,024 | - | 12,288 | - |
128×[email protected] (6)
176×[email protected] (6) |
2 | 16 | 1 | 1 |
2 | 3,686,400 | 122,880 | 1,500 | - | 2,250 | - | 4,500 | - | 12,000 | - | 144,000 | - | 352×[email protected] (6) | 2 | 16 | 1 | 1 |
2.1 | 7,372,800 | 245,760 | 3,000 | - | 4,500 | - | 9,000 | - | 24,000 | - | 288,000 | - |
320×[email protected] (12)
640×[email protected] (6) 352×[email protected] (12) 352×[email protected] (12) 352×[email protected] (6) 352×[email protected] (6) |
2 | 20 | 1 | 1 |
3 | 16,588,800 | 552,960 | 6,000 | - | 9,000 | - | 18,000 | - | 48,000 | - | 576,000 | - |
352×[email protected] (12)
960×[email protected] (6) 352×[email protected] (12) 640×[email protected] (12) 720×[email protected] (8) 720×[email protected] (8) |
2 | 30 | 2 | 2 |
3.1 | 33,177,600 | 983,040 | 10,000 | - | 15,000 | - | 30,000 | - | 80,000 | - | 960,000 | - | 1280×[email protected] (6) | 2 | 40 | 3 | 3 |
4 | 66,846,720 | 2,228,224 | 12,000 | 30,000 | 18,000 | 45,000 | 36,000 | 90,000 | 96,000 | 240,000 | 1,152,000 | 2,880,000 | 2,048×1,[email protected] (6) | 4 | 75 | 5 | 5 |
4.1 | 133,693,440 | 20,000 | 50,000 | 30,000 | 75,000 | 60,000 | 150,000 | 160,000 | 400,000 | 1,920,000 | 4,800,000 | 2,048×1,[email protected] (6) | 4 | ||||
5 | 267,386,880 | 8,912,896 | 25,000 | 100,000 | 37,500 | 150,000 | 75,000 | 300,000 | 200,000 | 800,000 | 2,400,000 | 9,600,000 | 4,096×2,[email protected] (6) | 6 | 200 | 11 | 10 |
5.1 | 534,773,760 | 40,000 | 160,000 | 60,000 | 240,000 | 120,000 | 480,000 | 320,000 | 1,280,000 | 3,840,000 | 15,360,000 | 4,096×2,[email protected] (6) | 8 | ||||
5.2 | 1,069,547,520 | 60,000 | 240,000 | 90,000 | 360,000 | 180,000 | 720,000 | 480,000 | 1,920,000 | 5,760,000 | 23,040,000 | 4,096×2,[email protected] (6) | 8 | ||||
6 | 1,069,547,520 | 35,651,584 | 60,000 | 240,000 | 90,000 | 360,000 | 180,000 | 720,000 | 480,000 | 1,920,000 | 5,760,000 | 23,040,000 | 8,192×4,[email protected] (6) | 8 | 600 | 22 | 20 |
6.1 | 2,139,095,040 | 120,000 | 480,000 | 180,000 | 720,000 | 360,000 | 1,440,000 | 960,000 | 3,840,000 | 11,520,000 | 46,080,000 | 8,192×4,[email protected] (6) | 8 | ||||
6.2 | 4,278,190,080 | 240,000 | 800,000 | 360,000 | 1,200,000 | 720,000 | 2,400,000 | 1,920,000 | 6,400,000 | 23,040,000 | 76,800,000 | 8,192×4,[email protected] (6) | 6 |
优点
- 减少存储和带宽需求:使用 H.264 一半的带宽或存储需求。
- 更好的视频质量:在减少数据使用的同时保持更高的视频质量。
缺点
- 兼容性问题:不如 H.264 广泛支持,导致在某些较旧的硬件系统上播放时出现问题。
- 需要更多的处理能力:H.265 的复杂算法比 H.264 需要更多的计算资源,导致在没有足够资源的硬件上处理速度较慢。
H.264 vs H.265
Features | H.264 | H.265 |
---|---|---|
压缩效率 | 实现良好的压缩效果 | 比 H.264 效率提升高达 50% |
视频质量 | 高质量但更高比特率 | 相同质量,一半比特率 |
比特率 | 更高以保持质量 | 相同画质视频降低 25-50%,比特率降低 33% 是较好的选择 |
分辨率 | 支持高达 4K | 支持高达 16K |
文件大小 | 较大的文件大小 | 较小的文件大小 |
处理能力 | 较低的计算需求 | 更高的计算需求 |
设备兼容性 | 支持大多数设备 | 与旧设备的兼容性有限 |
运动估计 | 预测准确性较低 | 更精确的运动补偿 |
块分区 | 使用固定的 16x16 宏块 | 使用灵活的编码树单元(简称 CTU)(64x64 至 4x4) |
延迟 | 更低延迟,更快编码 | 由于复杂编码导致更高的延迟 |
带宽 | 需要更多带宽 | 需要更少的带宽 |
用途 | 流媒体和广播标准 | 高分辨率视频存储/流媒体的理想选择 |
采用情况 | 被广泛采用为行业标准 | 尽管存在兼容性问题,采用率仍在增长 |
支持的容器格式 | MKV、MP4、QTFF、ASF、AVI、MXF、PS、TS、M2TS、EVO、3GP、F4V | MKV、MP4、QTFF、ASF、AVI、MXF、PS、TS、3GP |
我们该如何选择:
- 如果您需要流式传输或存储高分辨率视频内容,例如 4K 或 8K,H.265 通常更优,因为它具有更高的压缩效率和更低的带宽需求,尤其是在受限网络上。
- 如果兼容性和易用性是您的首要考虑,鉴于 H.264 广泛的设备支持以及在尚未完全支持 H.265 的旧设备和平台上提供更一致的观看体验,H.264 可能是更安全的选择。
- 如果功耗是您关心的问题,考虑到 H.265 倾向于更快耗尽电池寿命,并对缺乏专用硬件加速的低端硬件或设备增加更多负担,H.264 较低的计算需求可能更为合适。
结尾
本文探讨了 H.264、H.265,并且了解了它们之间的区别和局限性,随着设备性能的不断增强以及对实时性的要求增加,H.265 将在未来一段时间将不断普及,并且与 AV1 共同竞争市场,而 H.264 将慢慢退出历史舞台。