数字视频概念
在本文中,我们将探讨有助于全面理解如何在 Web 上处理视频的重要概念。
色彩编码
表示图像或视频中的颜色,每个像素需要几个值。这些值取决于您在将颜色转换为数值形式时如何“分割”颜色。有几种颜色模型,视频编解码器在编码过程中以及解码视频帧后会使用一种或多种模型来表示其像素。
RGB
大多数计算机图形模型使用 RGB 颜色系统,其中使用一定数量的数据位来表示单个像素颜色的红色、绿色和蓝色分量,图像由这些像素的二维数组组成。有两种主要方法用于表示 RGB 样本:使用整数分量和使用浮点数分量。在使用整数分量时,RGB 颜色为红色、绿色和蓝色各使用 8 位,以及可能用于 alpha(透明度)的 8 位。
YUV
与 RGB 不同,YUV (或 Y'UV) 颜色编码系统围绕人类感知彩色图像的方式构建。这样做可以在视频流中使用更少的总比特空间来表示颜色数据。
虽然“YUV”这个术语最初特指模拟彩色编码,而 YCbCr 用于数字彩色,但今天“YUV”通常用于描述这种颜色系统。然而,今天这两个术语都用于数字彩色。撇号('
)表示正在使用伽马校正。
审视人类视觉
我们能够以这种方式表示图像,是因为由于生物学的原因,人眼在灰度方面的细节远多于在彩色方面。人眼包含两种类型的 感光器(感光细胞)。视杆细胞是高度敏感的光强度传感器。视锥细胞灵敏度较低,但能够检测颜色。
由于眼睛中的视杆细胞远多于视锥细胞(约 1.2 亿个视杆细胞对约 600 到 700 万个视锥细胞),我们看到的灰度细节更多,而颜色细节要少得多。本质上,我们的眼睛就像一台带有两个图像传感器芯片的相机:一个灰度传感器和一个彩色传感器。灰度传感器为 1.2 亿像素,而彩色传感器仅为约 700 万像素。这些传感器物理上占据同一表面,称为眼后部的 视网膜。
有三种类型的视锥细胞,每种都对入射光的特定波长范围以及该波长下的光强度作出反应。然后,每种类型的视锥细胞都会捕获各种波长下的相对响应峰值,大脑利用这些数据来确定到达视网膜该部分的光的强度和色调。
当我们的眼睛捕捉场景时,它们实际上同时拍摄了两张照片:一张细节丰富的灰度图像和一张在同一时间跨越视网膜的、略显模糊的、分辨率较低的彩色光映射。最终的彩色图像由大脑创建,它基本上是将颜色叠加到灰度像素上。
YUV 概念
YUV 通过定义一个具有三个分量的颜色空间来工作:
- 亮度 (Y')
-
像素的亮度。如果没有另外两个分量,帧中每个像素的亮度会产生图像的灰度表示。例如,在 BT.709 (用于 HDTV) 中,亮度值是像素的伽马校正后的红色、绿色和蓝色分量的加权总和,使用公式
Y' = 0.2126R' + 0.7152G' + 0.0722B'
。进行此加权是因为之前提到的眼睛中绿色、红色和蓝色视锥细胞的比例。 - 蓝差 (U 或 Cb)
-
色度(颜色)样本的蓝色差分量。此值通过从伽马校正后的蓝色值中减去亮度来计算;即,
U = B' - Y'
。 - 红差 (V 或 Cr)
-
色度样本的红色差分量。通过从伽马校正后的红色值中减去亮度来计算:
V = R' - Y'
。
色度子采样
色度子采样是将彩色像素转换为灰度图像以及一个 U 和 V 值矩阵的过程,该矩阵指示要映射到这些像素的颜色。
由于颜色数据以比亮度低的分辨率编码,因此在解码视频以将其绘制到屏幕时,每个像素的颜色是通过计算给定像素所属的 4x2 块的 U 和 V 值来确定的。此解码操作必须镜像编码过程中使用的方法,该方法由三个用冒号(“:”)分隔的数字表示。
- 第一个数字指定从 4x2 像素块编码的每行中的亮度采样数。此值基本上始终为 4,表示“使用所有亮度采样”。
- 第二个数字指定用于表示第一行像素颜色的色度采样数。
- 第三个数字表示用于表示第二行像素颜色的色度采样数。
下表显示了三种色度子采样模型的示例。
4:2:0 | 4:2:2 | 4:4:4 | |
---|---|---|---|
亮度 |
|
|
|
色度 (U 和 V) |
|
|
|
解码后的像素 |
![]() |
![]() |
![]() |
在所有这些中,亮度数据块中每行的所有四个像素都用于解码图像。以 4:2:0 色度子采样为例,在第一列中,数字 2 表示第一行色度数据包含两个采样;数字 0 表示第二行没有自己的色度采样,并且第一行的采样将复制到第二行。换句话说,我们从源图像的每隔一行像素中提取颜色信息,并将其应用于由亮度表示的灰度图像。
第二列显示 4:2:2 子采样。四行亮度采样组成的顶部行应用了两个色度采样,底部行的亮度也应用了两个色度采样。然后,由该块表示的八个像素共享四个色度采样。
最后一个示例展示了 4:4:4 子采样。每行有四个亮度采样,每行也有四个色度采样,因此块所表示的每个像素都单独着色。
如果色度子采样模型是 4:0:0 呢?这意味着使用所有亮度数据像素,但每行应用 0 个色度采样。那么,生成的图像仅由亮度数据组成——灰度图像。
YUV 数据表示
由于图像以比彩色更详细的灰度方式表示,因此 Y'、U 和 V 的值通常不会像 RGB 图像在内存中存储的那样,每个像素一个样本地一起存储。
- 视频的每一帧由一个亮度值矩阵 Y 表示,每个像素的颜色使用 U 和 V 矩阵中的值计算。例如,在 AV1 编解码器中,一个记录存储一个图块的编码亮度,第二个记录包含 U 和 V 值形式的色度数据。
- 在广播电视中,亮度信号是主信号,而色度数据则通过副载波传输。
- JPEG 文件类型的压缩工作原理是首先将图像转换为 Y'UV 颜色系统,然后压缩该数据。Y'、Cb 和 Cr 的值都可以从 0 到 255。