shanaencoder吧 关注:1,157贴子:5,845
  • 1回复贴,共1

[机翻文档2]色彩空间和位深度

只看楼主收藏回复

[机翻文档2]色彩空间和位深度
对于视频编码,源分析至关重要。作为源分析的第一步,您可以使用 MediaInfo 或 ShanaEncoder 的“ 文件信息 ”来查找视频信息。

在视频方面,你会发现很多这样的信息:

红色高亮部分是视频流原始数据的信息。那么,YUV 究竟是什么?色度子采样又是什么?你可能听说过“8 位视频”和“10 位视频”,但 8 位和 10 位之间的区别究竟是什么呢?
■ 颜色模型和颜色空间
要理解 YUV,您需要了解颜色模型和色彩空间。 颜色模型是用于表达我们眼睛所见颜色(光)的原色组合。将其表示为红、绿、蓝三色的组合(加色混合)的方法称为 RGB 模型。设计专业的学生应该熟悉使用 CMYK 颜色模型合成相同颜色的方法,即在青色 (C)、品红色 (M) 和黄色 (Y) 的减色混合中添加黑色 (K)。
色彩空间是可以使用单一色彩模型来表达的色彩的集合 。即使采用相同的色彩模型,适合特定用途的色彩空间也可能有所不同。
如果你对视频和图像比较了解,应该会知道 RGB 是显示器的颜色表示方式,而 YUV 是一般未压缩数据(原始数据)的颜色表示方式 。那么,YUV 到底是什么呢?
如前所述,RGB 是光的三原色(红、绿、蓝)的缩写。它代表构成像素(图像元素) 的三个元素,像素是图像/视频的最基本单位。每个元素也称为一个通道 。
YUV 是该像素的三分量通道,它从 RGB 转换为亮度 (Y) 和色度 (UV) 。色度又由两个通道 U(Cb,蓝色色度)和 V(Cr,红色色度)组成。从数学上讲,这对应于坐标变换,RGB 的每个值都可以与 YUV 的每个值进行 1:1 转换。Y、U、V 并非具有独立含义的术语,而是惯常使用的坐标轴的名称,例如 X 轴和 Y 轴。
■ 为什么是 YUV?
那么,为什么对于未压缩的视频数据,我们使用 YUV 模型而不是 RGB 模型呢?主要有两个原因。
1)技术发展历程的反思
最初,以阴极射线管 (CRT) 为代表的 CRT 显示器在黑白电视上所能表达的色彩范围仅限于亮度。后来,能够表达色差的子通道被引入,从而推动了彩色电视的发展和普及。从黑白到彩色的转变带来了一项技术上的响应:通道从 Y 扩展到 YUV,最终形成了我们熟悉的 YUV 色彩模型。
2)利用亮度和色彩敏感度的差异来节省容量
更根本的原因是人类视觉的局限性。人类视觉对亮度(luminance)的差异比对颜色(chromance)的差异更敏感。因此, 通过粗略地忽略不太重要的色度数据,YUV 模型实现了 RGB 模型中无法实现的“容量节省” 。当然,忽略色度数据会导致图像质量下降,但根据心理视觉理论,普通人几乎不可能感知到图像质量的差异。这种“ 跳过像素间颜色差异 ”的做法,就是我们经常遇到的色度子采样 。
■ 色度子采样方案
所有色度子采样方法都有一个共同点:它们不会忽略亮度分量 Y,因为我们的眼睛对它很敏感。相反,这些方案根据多个像素如何分组并分配公共色度数据而有所不同,或者换句话说,根据是否忽略剩余像素的色度数据而有所不同。色度子采样方法有很多,但我将用图表说明最常见的几种——4:2:2、4:1:1 和 4:2:0。(当然,4:4:4 不会忽略任何内容。)
1) 4:2:2

4:2:2 方法将公共色度数据分配给一行中的两个像素 。换句话说,两个水平像素中的一个会省略色度数据,并用紧接在前一个像素的色度数据替换它。
这样,实际的数据数组就变成了 Y0-U0-V0-Y1,原本应该分配给两个像素的采样数(= 每个通道进入每个像素的数据块 ,图中一个空格)减少为 4 个,因此整体容量就变成了原来的 4/6=2/3 。
如果样本大小(位深度) (= BPC ,每组件位数)为 8 位,则该图像称为 8 位图像;如果样本大小为 10 位,则该图像称为 10 位图像 。(BPC 为 10 位或更高的图像有时缩写为 HBD (高位深度)图像。HBD 是 HDR(高动态范围)图像的基础。)
因此,对于 8 位图像,每个像素应该分配 3(样本数)x 8(位深度)= 24 位,但最终变成了 24 x 2/3 = 16 位,导致数据容量为每像素 16 位(BPP,bits per pixel) 。
这样表达的未压缩数据在实际显示器上显示时会还原为 RGB 模型,此时两个像素的数据流由 Y0-U0-V0-Y1 转换为 Y0-U0-V0-Y1-U0-V0,并复制第二个像素的色差部分。
2) 4:1:1

4:1:1 方法将公共色度数据分配给一行中的四个像素 。换句话说,在一行中的四个像素中,省略三个像素的色度数据,并用第一个像素的色度数据替换。
这样,实际的数据数组就变成了 Y0-U0-V0-Y1-Y2-Y3,而原本应该分配给 4 个像素的采样数 12 个就减少为 6 个,因此整体容量就变成了原来的 6/12=1/2 。
同样,对于 8 位图像,每个像素必须分配 24 位,因此数据容量变为 24 x 1/2 = 12 位,从而导致数据容量为 12 bpp 。
3) 4:2:0

该方法与 4:1:1 方法非常相似,只是目标像素是正方形,宽 2 像素,高 2 像素 。
因此,此方法中的数据排列以正方形表示为 Y0-U0-V0-Y1-Y4-Y5。容量是原始容量的一半,与 4:1:1 方法相同。因此,对于 8 位图像, bpp 也变为 12 位 。
MediaInfo 的“ bits/(pixels*frames) ”信息表示每个像素的位数(未压缩数据原本为 12 位),经过编码(压缩)后被压缩了多少位 。上方 MediaInfo 截图中显示的“0.092”表示原本的 12 位被压缩为 0.092 位(压缩率约为 130 倍)。
采用这种类似于 4:1:1 的方法的原因是,当今大多数编解码器都以方形宏块或编码单元 (cu) 为单位计算数据压缩 (编码) 和解压缩 (解码),从而使编码/解码更容易 。
目前最广泛使用的未压缩数据像素格式是 yuv420p ,这意味着 YUV 颜色模型采用 4:2:0 色度子采样 。'p' 代表 'planar',表示一帧的 YUV 数据阵列是按各个轴排列的。yuv420p 也写作 I420 ,如果 V 轴信息在 U 轴之前,则写作 YV12 。YV12 是目前使用最广泛的像素格式 。I420 (即 yuv420p)和 YV12 本质上被视为相同的格式。
与 I420 或 YV12 不同,NV12 具有单独的亮度和色度数据,但色度数据与 U 和 V 交错。这种格式称为半平面或双平面格式。
像素格式名称末尾的数字 12 表示 bpp。因此,我们可以看出这些格式都是 8 位图像的表示法。
□ 补充说明
需要注意的是 ,MediaInfo 显示的信息并非绝对的 。MediaInfo 仅显示视频头中记录的内容。因此,如果视频包含与实际数据流不同的内容(例如通过复用),它可能会显示不正确的信息。因此 ,请仅将 MediaInfo 用作主要参考,并记住,如果需要更详细的分析,您应该使用其他工具,例如 ffprobe 。


IP属地:广东1楼2025-10-24 22:14回复
    原文:shana.pe.kr/shanaencoder_tip/80679


    IP属地:广东2楼2025-10-24 22:15
    回复