一、引言
在当今的数字视频世界中,H.264编码技术无疑占据着至关重要的位置。虽然H.264编码原理可能听起来复杂又深奥,但只要深入了解视频的特性,就能明白为什么它需要如此设计。通过利用视频内容的冗余性和人眼的感知特性,H.264能够显著提高视频的压缩效率,同时保持较高的视觉质量。本文将带您一探究竟,揭示H.264编码技术的核心原理,并对其与其他前沿编码格式的对比进行详细阐述。
二、为什么视频需要编码
-
原始未压缩视频:假设你有一段1080p(1920x1080)分辨率的原始未压缩视频,每秒30帧(30fps),每个像素24比特。
- 数据量(每秒):30* 24 * 1920 * 1080 = 1.49 Gbps
-
H.264编码视频:可以将数据量压缩到原始数据量的1/50到1/100。
- 压缩后数据量:15-30 Mbps
这只是1s的数据量,如果你用5G看视频,看一条短视频就会收到流量耗尽,手机已欠费的短信了。
三、为什么视频可以编码
视频编码的基础是利用数据的冗余性和人眼的感知特性,从而在不显著影响感知质量的前提下降低数据量。视频编码主要利用了以下几种冗余和感知特性:
3.1 空间冗余
基本原理:相邻像素之间通常具有很高的相关性。例如,在一个平滑过渡的天际背景中,相邻的像素通常都是相似的颜色和亮度。
比如大部分天空部分是均匀的蓝色。如果我们能够只记录一个蓝色值,然后加上少量的数据来说明这个颜色的扩展区域,就能显著减少数据量。
3.2 时间冗余
基本原理:视频帧序列中,有连续的帧表示同一场景或对象,仅有小部分变化。这意味着许多帧之间是高度相似的。
比如这个球,其中大部分帧中的背景几乎是静止的,只有球的位置发生了变化。利用时间冗余,我们只要记录这个球的位移就可以了
3.3 视觉冗余
基本原理:人眼对某些细节不敏感,比如高频细节(细小的纹理)和颜色变化的感知度不高。变换与量化步骤就利用了这些特性,舍弃或简化了这些人眼不敏感的细节,大幅降低数据量。
人眼其实是一台像素高达5.76亿的超级相机,这些数据如果都要送进我们的大脑里边去处理,那一会儿就会宕机了,所以人脑只会处理一些关键信息(低频信息),基于这个特性,在编码的过程中可以放弃一些高频信息,这样可以大幅降低数据量。
3.4 信息熵冗余
信息熵冗余是指在信息表达中,由于数据的概率分布不均匀或存在一定规律,导致实际携带的信息量小于理论上可能携带的最大信息量,从而产生的冗余。
举个简单的例子,一串文本aaaaaabb,需要8个字节来保存,a8b2,只要4个字节,而且还是无损的~
四. H.264编码过程概述
H.264编码过程充分利用了视频的特性,包括若干关键步骤:帧内预测、帧间预测、变换与量化、熵编码等。在此,我们将逐一介绍这些步骤,了解一个大概即可,我会在后面的文章中详细介绍每一步。
4.1 帧内预测 (Intra Prediction)
帧内预测指的是在编码当前图片时,仅依赖当前帧的已有数据进行预测。它利用的是空间冗余的特性,也就是相邻的像素块不会有太大的变化,只要记录差异值即可。
帧内预测也一样,它利用相邻像素(通常是左侧、上方和左上方)来预测当前块的值。
说预测可能会让你想到概率,其实和概率没关系。
在视频编码中的帧内预测,通常有 9 个预测方向,包括:垂直(Vertical)、水平(Horizontal)、左对角线(Diagonal Left)、右对角线(Diagonal Right)、垂直向右(Vertical-Right)、垂直向左(Vertical-Left)、水平向下(Horizontal-Down)、水平向上(Horizontal-Up)以及直流(DC,平均值预测)。
可以理解成9个算法,算出9个候选预测块,然后我们再用编码块减去每一个候选预测块得到一个个残差块。最后,我们取这些算法得到的残差块中像素的绝对值加起来最小的块为作为预测块。
4.2 帧间预测 (Inter Prediction)
帧间预测利用视频帧之间的相关性,通过参考前后帧中的块来预测当前帧中的块。这可以显著减少编码信息量。
关键步骤有两个,一个是遍历已编码的帧,找到和当前编码帧最相似的图像,另外一个是计算运动矢量(位移 + 方向)。
如何遍历在后面会具体分析,首先剧透一下不是用穷举法。
另外如果每个运动矢量都要记录,那也是一笔不小的开销,所以运动矢量的保存也借鉴了帧内预测的方法,记录运动矢量的残差值即可。
4.3 变换与量化 (Transform and Quantization)
量化是利用视觉冗余,应用离散余弦变换(DCT)将残差从空间域转换到频域。接着,对变换后的系数进行量化,以舍弃一些不重要的细节,从而进一步压缩数据量。
首先介绍一下高频信息和低频信息
低频信息:
- 代表图像中缓慢变化的部分,通常是图像的整体轮廓和大面积的平滑区域。
- 反映了图像的主要结构和大致内容。
- 包含图像中较为稳定和持久的特征。
高频信息:
- 对应图像中快速变化的部分,例如图像的边缘、纹理、细节和噪声。
- 提供了图像的精细结构和局部变化的特征。
举例来说,对于一张清晰的人物照片,人物的大致轮廓和背景的整体色调属于低频信息;而人物的发丝、衣物的纹理、面部的细微表情变化等则属于高频信息。
DCT变换后,DCT系数能量主要集中在左上角,其他区域就会趋向于0。
其他区域通常会趋向于0,但很多时候不是0,
处理起来很简单,我们会把所有系数处以一个QP(Qstep)值,那大部分高频系数就变成0了,然后解码时再乘上QP值。
由此可见,DCT本身并不损失图像质量,QP越大,质量损失越大。
4.4 熵编码 (Entropy Coding)
最后,量化系数通过熵编码进一步压缩,利用霍夫曼编码或算术编码等算法,将较常见的符号分配较短的码字,而较不常见的符号分配较长的码字,从而提高编码效率。
H.264 中主要采用了两种熵编码方式:上下文自适应的可变长编码(CAVLC)和上下文自适应的二进制算术编码(CABAC)。这个后面也会介绍。
五、H264和其他编码方式的对比
特性 | H.264/AVC | H.265/HEVC | VP9 | AV1 |
---|---|---|---|---|
标准发布时间 | 2003年 | 2013年 | 2013年 | 2018年 |
专利 | 由MPEG-LA管理,需要许可费 | 由MPEG-LA和HEVC Advance管理,需要许可费 | 开源,未被专利池管理,Google开源 | 开源,开放媒体联盟管理,不需许可费 |
压缩效率 | 较高 | 更高 | 与H.264相近或稍高 | 较H.265/HEVC更高,大约比H.265提升20%-30% |
计算复杂性 | 中等 | 高 | 中等 | 高 |
公司支持 | 广泛支持,标准化组织(ITU-T、ISO、IEC) | 广泛支持,标准化组织(ITU-T、ISO、IEC) | Google、YouTube、Firefox、Android | Google、Mozilla、苹果(部分)、Facebook、Netflix等 |
硬件支持 | 广泛,几乎所有现代设备 | 逐渐普及,但部分老旧设备不支持 | 有限,多数需要软件解码 | 较少,主要依赖于软件解码 |
编码速度 | 较快 | 较慢 | 较快 | 较慢 |
应用场景 | 广泛用于蓝光光盘、视频流、实时通信、网络视频 | 4K视频、超高清电视、流媒体、视频会议 | YouTube视频流、WebRTC | 流媒体、高清和超高清内容、低带宽传输 |
图像质量 | 优秀 | 非常优秀,支持更高分辨率 | 优秀 | 非常优秀,特别是低比特率下 |
六、总结
H.264编码通过一系列精确高效的步骤实现了视频数据的高效压缩。这些步骤包括帧内预测、帧间预测、变换与量化、熵编码等,每一个步骤都有其独特的意义和作用。通过利用空间冗余、时间冗余等特性,H.264能够显著减少视频数据量,并极大地提升视频传输和存储的效率。
尽管H.264是目前最广泛使用的视频编码标准,然而技术总在进步,新一代编码格式如H.265、VP9和AV1不断涌现,使得视频编码技术向着更高效、更开放的方向发展。从压缩效率、解码性能和应用场景等角度出发,各种编码格式有着不同的优势和应用前景。