浅谈 H.264/AVC 编码标准——视频编码入门

1 数字视频

视频是一组图像在时间轴上的顺序排列,每幅图像为一帧。利用人眼的视觉暂留特性,当每秒播放的视频帧数大于 15 帧时,就会形成连续运动的视频效果。

1.1 采样与量化

由于所有信息在计算机内部都是以数字形式描述的,所以采集到的视频信号必须转换为数字量,即视频的数字化。

视频信号的 x,y 坐标值及幅度值都是连续的,为把他们转换为数字形式,需要进行采样和量化。数字化坐标值称为采样;数字化幅度值称为量化

若一幅经过采样和量化的数字图像有 $M$ 行、$N$ 列。对于离散灰度级数 L 的典型定义是 2 的整数次幂,记作 $L=2^k$,假设灰度级是在区间 $[0,L-1]$ 上等间隔的整数。那么,储存这幅数字图像所需的比特数 $B=M×N×k$。

当一幅图像有 $2^k$ 个灰度级,$k$ 即位深度,通常称该图像是 $k$ bit 图像。例如一幅灰度图像一般有 256 个灰度级,也可以称为 8 bit 图像。

1.2 颜色空间

灰度图像仅有采样点的亮度信息,而对于彩色图像表示就更为复杂。人们根据人眼的生理结构,构造了不同的颜色空间来表示客观图像的亮度和颜色。将任何一种颜色分解为颜色空间中的一个或多个变量,视频信号处理中常用的颜色空间有 $RGB$ 和 $YUV$。

  • RGB 颜色空间

包含三个分量:基本颜色红(R)、绿(G)、蓝(B)不同强度的组合。

R、G、B(光的三原色)是叠加色,任何颜色都可以由三者不同强度的叠加得到。RGB 三个分量中有一个发生变化,则总的图像颜色就会发生变化,而这种变化很容易被人眼察觉。在 RGB 颜色空间中,三个分量同样重要,通常以相同的分辨率保存。

原色是指不能通过其他颜色的混合得到的“基本色”。

图 1.1 RGB Sample
图 1.1 展示了彩色图像 RGB 三个分量的强度,皮肤在红色(R)分量显得更亮,天空则在蓝色(B)分量显得更亮。颜色分量的强度越高,越亮;强度越低,越暗。

RGB 颜色空间非常适合拍摄和显示彩色图像。拍摄 RGB 图像包括过滤并使用单独的传感器捕获每个 RGB 分量。液晶显示器(LCD)和旗舰手机屏幕(OLED)都是根据每个像素 RGB 的强度分别照明,从而显示 RGB 图像。在正常距离观看,单独的颜色分量叠加在一起,呈现出“真实”色彩的原貌。
图 1.2 OLED屏幕

  • YUV 颜色空间

YUV 和 YCbCr 彼此重叠,都可以称为 YUV。
亮度(Luma)Luminance
色度(Chroma)Chrominance

包含三个分量:亮度分量(Y)描述灰度值,两个色度分量(U、V)描述色彩和饱和度。

$Y$、$U$、$V$ 三个分量相互独立,可以避免相互干扰。人眼对这三个分量的变化敏感程度不同,对亮度 $Y$ 的变化更敏感,而对色度 $U$、$V$ 的变化较不很敏感。

图 1.3 YUV Sample

U(Chroma blue,Cb)蓝色色度;V(Chroma red,Cr)红色色度

YCbCr 颜色空间是相当常用的存储彩色图像的方法。亮度分量 $Y$ 由 $R$、$G$、$B$ 的加权平均值计算得出。

$$Y=k_r{R}+k_g{G}+k_b{B}
\tag{1.1}$$
其中 $k$ 为加权系数。

色度分量 $C_b$、$C_r$、$C_g$ 表示颜色信息,每个色度分量是 $R$、$G$、$B$ 与亮度 $Y$ 之间的差值:
$$\begin{aligned}
C_{b}=B-Y \\
C_{r}=R-Y \\
C_{g}=G-Y \\
\end{aligned} \tag{1.2}$$

彩色图像的完整描述是由亮度分量 Y 和三个色度分量 Cb、Cr、Cg 给出的,他们表示图像的颜色强度和平均亮度之间的差异。

若是使用四个分量,而不是 RGB 颜色空间中的三个分量,那么 YCbCr 颜色空间也看起来没什么意义。但实际上,$C_b+C_r+C_g$ 是一个常数,所以只需要存储三个色度分量中的两个,第三个分量可以通过计算得出。这也就是图 1.3 中 Cg 色度分量消失的原因。

为了降低存储和传输的成本,在捕获 RGB 图像后可能会转换为 YCbCr 存储。为了适应显示器的需要,在显示前还会转回 RGB。所以实际上,YCbCr 和 RGB 颜色空间也是可以相互转换的。

$$\begin{aligned}\begin{bmatrix}
Y \\
C_{b} \\
C_{r}
\end{bmatrix}=\begin{bmatrix}
0.2126 & 0.7152 & 0.0722 \\
-0.1146 & -0.3854 & 0.15 \\
0.5 & -0.4542 & -0.0458
\end{bmatrix}\begin{bmatrix}
R \\
G \\
B
\end{bmatrix}\end{aligned}\tag{1.3}$$

$$\begin{aligned}\begin{bmatrix}
R \\
G \\
B
\end{bmatrix}=\begin{bmatrix}
1 & 0 & 1.5748 \\
1 & -0.1873 & -0.4681 \\
1 & 1.8556 & 0
\end{bmatrix}\begin{bmatrix}
Y \\
C_{b} \\
C_{r}
\end{bmatrix}\end{aligned}\tag{1.4}$$

因为 $k_b+k_r+k_g=1$,所以 $k_g$ 的值无需规定。此转换矩阵基于 ITU-R BT.709 标准规定的 $k_b=0.0722$ 和 $k_r=0.2126$。

YCbCr 较 RGB 颜色空间更重要的优势是:可以用比 Y 分量更低的分辨率存储 Cb、Cr 分量。因为人眼对色度的敏感度比亮度低,即使大幅减少色度分量的数据量,视觉质量也不会发生明显的变化。在不同的应用场景中,对三个分量的采样比例也不尽相同,这就不得不提到 YCbCr 的采样格式了。

1.3 采样格式

图 1.4 采样格式比较(逐行扫描)

图 1.4 展示了基于 YCbCr 颜色空间四种常见的采样格式:4:2:0,4:2:2,4:4:4,4:1:1。我们通常给予色度分量比亮度分量更低的采样率,并且不会带来显著的感知质量损失。采样格式使用形如 J:A:B 的符号表示 U 和 V 相对于 Y 的采样比例,这其实是构建了一个 J 像素宽 2 像素高的概念区,符号的详细介绍:

  • J: 水平方向采样基准(概念区的宽度),通常为 4。
  • A: J 像素第一行中的色度样本数(U, V)。
  • B: J 像素第二行中(相对第一行增加)的色度样本数(U, V)。

最常产生的误解是把采样格式 J:A:B 当做 Y:U:V 的简单比例式,然而不仅不是简单的比例式,还把 U 和 V 看做了一个整体的色度样本统计。在这样前提下,我们才能重新认识 4:2:0 这个看起来不合逻辑的采样格式。下面聊聊图 1.4 中提到的采样格式:

  • 4:4:4 存储了完全保真度的色度分量,每个像素都有色度样本,没有进行下采样。
  • 4:2:2 水平方向色度分辨率减半,竖直方向色度分辨率相同,带宽节约 1/3。应用于高质量数字图像。
  • 4:2:0 水平、竖直方向色度分辨率均减半,带宽节约 1/2。注意 4:2:0 中的 0 表示色度样本交替传输,第二行的色度分量从前一行恢复,而非对 Cb 采样两份不对 Cr 采样。最常应用的消费领域采样格式。
  • 4:1:1 水平方向色度分辨率降至 1/4,竖直方向色度分辨率相同,带宽节约 1/2。最初应用于 NTSC 制式的模拟电视和 DV,现已淡出主流市场。

对于隔行扫描视频,一个完整帧图像由两个场构成,奇数行和偶数行分别组成顶场和底场。优点是在带宽不变的情况下,每一秒种隔行(Interlaced)传送场是逐行(Progressive)传送帧的两倍,从而带来更平滑的运动观感。

图 1.5 隔行扫描视频结构

那么在 4:2:0 隔行视频中,也会将一个完整帧图像的 Y、Cb、Cr 样本分配到一组隔行场中。图 1.6 介绍了分配方法,这也诠释了图 1.4 中 4:2:0 逐行采样图例,色度样本表示在两行间隔处的原因。

图 1.6 YUV420 采样(隔行扫描)

2 编码技术基础

数字视频具有庞大的数据量。比如,一路未经压缩的高清晰度电视(High Definition Television,HDTV)信号约需 1 Gbit/s。实际应用中,因为传输带宽和储存容量有限,所以必须对视频数据压缩编码。要求在保证重建视频质量的基础上,最大限度减少传输和储存的数据量。

在高清晰度、高帧率数字视频日趋普及的今天,如何节省储存空间、降低网络传输成本,是极具应用价值的工作。

由于视频数据本身存在着大量冗余信息,为视频压缩编码提供了技术上的可行性。现有视频编码技术利用的冗余特性主要包括:

空间冗余: 视频序列中的一帧图像内往往存在着大量内容近似的区域,相邻像素之间有着较大的相关性,甚至某一区域可以有相邻的区域预测得到。这样可以采用预测的方法和对预测后真实值与预测值的差值(即残差)进行编码即可。

图 2.1 空间冗余

解决:帧内预测、变换编码

时间冗余: 视频序列中多帧连续图像的内容可能变化不大,甚至有很多相同的场景。可以只对相邻图像之间的有变化的像素进行编码。

图 2.2 时间冗余

解决:帧间预测

视觉冗余: 人眼对于各种图像特征的分辨能力不同。例如上文提到,人眼对亮度变化敏感,对色度变化不敏感,就可以使用 YUV420、422 等采样格式,减少色度分量的采样比例。再如,人眼对物体边缘敏感,对内部区域相对不敏感;对整体结构敏感,对内部细节相对不敏感,可以用较少码率编码不敏感的部分。

解决:采样和量化

信息熵冗余(统计冗余): 对于视频图像上的每个像素,会分配相同的比特数表示灰度级。实际上每个像素值出现的概率不同,而且像素值所携带的信息量与其出现的概率有关。只要每个像素值比特数所具有的信息熵没有达到理论极限,都存在被压缩的可能性。

解决:熵编码

根据香农信息论,出现概率高的符号含有的信息量少,可以用较少的比特数表示;出现概率低的符号含有的信息量大,可以用较多的比特数表示,就能减少总体花费的比特数。

3 视频编码标准发展历程

1990 年以来,一揽子视频编解码的建议被提出、标准被制定。很多企业和组织针对不同的应用传输环境制定了相应标准,其中被普遍认同的主要有三大系列:

  • ISO/IEC 为视频存储、广播视频和网络视频等制定的 MPEG 系列标准;
  • ITU-T 针对多媒体通信制定的 H.26x 系列标准;
  • 我国研发和制定的具有自主知识产权的 AVS 系列标准。

现今使用最广泛的视频编码标准是 H.264/AVC(AVC 是 MPEG-4 的第 10 部分,即 H.264)。H.264 是由 ITU-T 的视频编码专家组(VCEG)和 ISO/IEC 的动态视频专家组(MPEG)于 2001 年成立的联合视频专家组(JVT)开发,并且在 2003 年 3 月正式发布的一种基于块的混合编解码标准。

H.264 被广泛应用于诸多领域,其优越性主要体现在以下三个方面:

  • 高压缩率: 在相同视频质量下,其码率为 MPEG-2 或 H.263 的一半,极大地缓解了网络传输带宽压力。
  • 容错能力强: H.264 采用了多种容错机制,可以很好地解决误码和丢包,容错能力是 MPEG-4 的 2 倍。
  • 网络适应性强: 通过对编码过程进行视频编码层(VCL)、网络提取层(NAL)的分层,H.264 可以获得很好的网络适应性,非常适合各种有线、无线传输场合。

随着数字视频产业的日益发展,即使是 H.264 标准也在压缩和网络应用等方面显现出了局限性。于是,2010 年初 ITU-T 的 VCEG 工作组和 ISO/IEC 的 MPEG 工作组再次通力合作,成立了视频编码联合工作组(JCT-VC)审议评估新一代的编解码标准方案。

2013 年 1 月,高效视频编码标准 H.265/HEVC(JCT-VC 将其命名为 HEVC,ITU-T 将其命名为 H.265)第一版修订完成并正式公布。HEVC 仍然沿用了基于块的混合编码框架,进行了很多技术革新。使其在功能和性能上都全面突破了 H.264 的瓶颈,在保证了视频质量的同时,大幅度提高了压缩率,降低了网络通信和数据存储成本。

国际电信联盟—电信标准化部门(International Telecommunication Union-Telecommunication Standardization Sector,ITU-T)
国际标准化组织及国际电工委员会(International Organization for Standardization and International Electrotechnical Commission,ISO/IEC)
视频编码专家组(Video Coding Experts Group,VCEG)
活动图像专家组(Moving Picture Expert Group,MPEG)
联合视频专家组(Joint Video Team,JVT)
高级视频编码(Advanced Video Coding,H.264/AVC)
数字音视频编解码技术标准(Audio Video Standard,AVS)
视频编码层(Video Coding Layer,VCL)
网络提取层(Network Abstraction Layer,NAL)
视频编码联合工作组(Joint Collaborative Team on Video Coding,JCT-VC)
高效视频编码(High Efficiency Video Coding,H.265/HEVC)

4 建设中待更新

最后修改:2021 年 11 月 24 日
如果觉得我的文章对你有用,请随意赞赏