音视频入门文章目录

YUV & YCbCr 简介

  • YUV,是一种颜色编码方法。常使用在各个视频处理组件中。 YUV 在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。
  • Y 表示明亮度(Luminance或Luma),也就是灰阶值,U 和 V 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。
  • Y'CbCr 不是一种绝对的色彩空间,是一种针对 RGB 资讯所做的编码。真正的颜色显示是根据实际 RGB 色盘(colorant)来决定的。因此 Y'CbCr 所表示的值只有在标准 RGB 色盘或是 ICC 数据(ICC profile)有提供的时候才能计算。Y'CbCr 在模拟分量影像(analog component video)中也常被称为 YPbPr。
  • YCbCr 不是一种绝对色彩空间,是 YUV 压缩和偏移的版本。YCbCr 的 Y 与 YUV 中的 Y 含义一致,Cb 和 Cr 与 UV 同样都指色彩,Cb 指蓝色色度,Cr 指红色色度,在应用上很广泛,JPEG、MPEG、DVD、摄影机、数字电视等皆采此一格式。
  • [ [ [ 因此一般俗称的 YUV 大多是指 YCbCr ] ] ]。
  • [ [ [ 因此一般俗称的 YUV 大多是指 YCbCr ] ] ]。
  • [ [ [ 因此一般俗称的 YUV 大多是指 YCbCr ] ] ]。

YUVFormats分成两个格式:

  • 紧缩格式(packedformats):将 Y、U、V 值存储成 MacroPixels 数组,和 RGB 的存放方式类似。
  • 平面格式(planarformats):将 Y、U、V 的三个分量分别存放在不同的矩阵中。

紧缩格式(packedformat)中的 YUV 是混合在一起的,对于 YUV4:4:4 格式而言,用紧缩格式很合适的,因此就有了 UYVY、YUYV 等。

平面格式(planarformats)是指每 Y 分量,U 分量和 V 分量都是以独立的平面组织的,也就是说所有的 U 分量必须在 Y 分量后面,而 V 分量在所有的 U 分量后面,此一格式适用于采样(subsample)。平面格式(planarformat)有 I420(4:2:0)、YV12、IYUV 等。

YUV 采样格式

为节省带宽起见,大多数 YUV 格式平均使用的每像素位数都少于 24 位。主要的采样(subsample)格式有 YCbCr4:2:0、YCbCr4:2:2、YCbCr4:1:1 和 YCbCr4:4:4。YUV 的表示法称为 A:B:C 表示法:

  • 4:4:4 表示完全取样。
  • 4:2:2 表示 2:1 的水平取样,垂直完全采样。
  • 4:2:0 表示 2:1 的水平取样,垂直 2:1 采样。
  • 4:1:1 表示 4:1 的水平取样,垂直完全采样。

<br/>

表格中,每一格代表一个像素

未采样前

-1234
1Y0 U0 V0Y1 U1 V1Y2 U2 V2Y3 U3 V3
2Y4 U4 V4Y5 U5 V5Y6 U6 V6Y7 U7 V7
3Y8 U8 V8Y9 U9 V9Y10 U10 V10Y11 U11 V11
4Y12 U12 V12Y13 U13 V13Y14 U14 V14Y15 U15 V15

4:4:4 采样

4:4:4 表示完全取样
-1234
1Y0 U0 V0Y1 U1 V1Y2 U2 V2Y3 U3 V3
2Y4 U4 V4Y5 U5 V5Y6 U6 V6Y7 U7 V7
3Y8 U8 V8Y9 U9 V9Y10 U10 V10Y11 U11 V11
4Y12 U12 V12Y13 U13 V13Y14 U14 V14Y15 U15 V15

映射的像素:

-1234
1Y0 U0 V0Y1 U1 V1Y2 U2 V2Y3 U3 V3
2Y4 U4 V4Y5 U5 V5Y6 U6 V6Y7 U7 V7
3Y8 U8 V8Y9 U9 V9Y10 U10 V10Y11 U11 V11
4Y12 U12 V12Y13 U13 V13Y14 U14 V14Y15 U15 V15

4:2:2 采样

4:2:2 表示 2:1 的水平取样,垂直完全采样
每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一个采集一个。
-1234
1Y0 U0 -Y1 - V1Y2 U2 -Y3 - V3
2Y4 U4 -Y5 - V5Y6 U6 -Y7 - V7
3Y8 U8 -Y9 - V9Y10 U10 -Y11 - V11
4Y12 U12 -Y13 - V13Y14 U14 -Y15 - V15

映射的像素:

-1234
1Y0 U0 V1Y1 U0 V1Y2 U2 V3Y3 U2 V3
2Y4 U4 V5Y5 U4 V5Y6 U6 V7Y7 U6 V7
3Y8 U8 V9Y9 U8 V9Y10 U10 V11Y11 U10 V11
4Y12 U12 V13Y13 U12 V13Y14 U14 V15Y15 U14 V15

4:2:0 采样

4:2:0 表示 2:1 的水平取样,垂直 2:1 采样
每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一行按照 2 : 1 进行采样。
-1234
1Y0 U0 -Y1 - -Y2 U2 -Y3 - -
2Y4 - V4Y5 - -Y6 - V6Y7 - -
3Y8 U8 -Y9 - -Y10 U10 -Y11 - -
4Y12 - V12Y13 - -Y14 - V14Y15 - -

映射的像素:

-1234
1Y0 U0 V4Y1 U0 V4Y2 U2 V6Y3 U2 V6
2Y4 U0 V4Y5 U0 V4Y6 U2 V6Y7 U2 V6
3Y8 U8 V12Y9 U8 V12Y10 U10 V14Y11 U10 V14
4Y12 U8 V12Y13 U8 V12Y14 U10 V14Y15 U10 V14

4:1:1 采样

4:1:1 表示 4:1 的水平取样,垂直完全采样
每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一行按照 2 : 1 进行采样。
-1234
1Y0 U0 -Y1 - -Y2 - V2Y3 - -
2Y4 U4 -Y5 - -Y6 - V6Y7 - -
3Y8 U8 -Y9 - -Y10 - V10Y11 - -
4Y12 U12 -Y13 - -Y14 - V14Y15 - -

映射的像素:

-1234
1Y0 U0 V2Y1 U0 V2Y2 U0 V2Y3 U0 V2
2Y4 U4 V6Y5 U4 V6Y6 U4 V6Y7 U4 V6
3Y8 U8 V10Y9 U8 V10Y10 U8 V10Y11 U8 V10
4Y12 U12 V14Y13 U12 V14Y14 U12 V14Y15 U12 V14

YUV 存储方式

YUV 的存储方式,一般有两种方式,一种叫 packed 模式,一种叫 planar 模式。packed 模式 Y,U,V 交错排列,而 planar 模式 Y 和 U,V 的排列是分开的,而具体 U 与 V 继续分开或者继续交错排列根据具体的格式相关。

<br/>
常见的基于 YUV422 采样的格式:

YUV422 采样
YUYV 格式
UYVY 格式
YUV422P 格式

<br/>
常见的基于 YUV420 采样的格式:

YUV420P 类型YUV420SP 类型
YV12 格式YU12 格式
NV12 格式NV21 格式

基于 YUV444 采样的格式

4x4 像素 YUV444 采样:

-1234
1Y0 U0 V0Y1 U1 V1Y2 U2 V2Y3 U3 V3
2Y4 U4 V4Y5 U5 V5Y6 U6 V6Y7 U7 V7
3Y8 U8 V8Y9 U9 V9Y10 U10 V10Y11 U11 V11
4Y12 U12 V12Y13 U13 V13Y14 U14 V14Y15 U15 V15

YUV444P 格式

存储时:

Y0  Y1  Y2  Y3  Y4  Y5  Y6  Y7 
Y8  Y9  Y10 Y11 Y12 Y13 Y14 Y15
U0  U1  U2  U3  U4  U5  U6  U7 
U8  U9  U10 U11 U12 U13 U14 U15
V0  V1  V2  V3  V4  V5  V6  V7 
V8  V9  V10 V11 V12 V13 V14 V15

基于 YUV422 采样的格式

4x4 像素 YUV422 采样:

-1234
1Y0 U0 -Y1 - V1Y2 U2 -Y3 - V3
2Y4 U4 -Y5 - V5Y6 U6 -Y7 - V7
3Y8 U8 -Y9 - V9Y10 U10 -Y11 - V11
4Y12 U12 -Y13 - V13Y14 U14 -Y15 - V15

YUYV 格式

YUYV 格式是采用打包格式进行存储的,指每个像素点都采样 Y 分量,但是每隔一个像素采样它的 UV 分量。

存储时(每个方括号里是 Macropixel=2 image pixels):

[Y0  U0  Y1  V1 ][Y2  U2  Y3  V3 ]
[Y4  U4  Y5  V5 ][Y6  U6  Y7  V7 ]
[Y8  U8  Y9  V9 ][Y10 U10 Y11 V11]
[Y12 U12 Y13 V13][Y14 U14 Y15 V15]

对 U,V 分量重新编号:

[Y0  U0  Y1  V0 ][Y2  U1  Y3  V1 ]
[Y4  U2  Y5  V2 ][Y6  U3  Y7  V3 ]
[Y8  U4  Y9  V4 ][Y10 U5  Y11 V5 ]
[Y12 U6  Y13 V6 ][Y14 U7  Y15 V7 ]

UYVY 格式

UYVY 格式也是采用打包格式进行存储,它的顺序和 YUYV 相反,先采样 U 分量再采样 Y 分量。

存储时(每个方括号里是 Macropixel=2 image pixels):

[U0  Y0  V1  Y1 ][U2  Y2  V3  Y3 ]
[U4  Y4  V5  Y5 ][U6  Y6  V7  Y7 ]
[U8  Y8  V9  Y9 ][U10 Y10 V11 Y11]
[U12 Y12 V13 Y13][U14 Y14 V15 Y15]

对 U,V 分量重新编号:

[U0 Y0  V0 Y1 ][U1 Y2  V1 Y3 ]
[U2 Y4  V2 Y5 ][U3 Y6  V3 Y7 ]
[U4 Y8  V4 Y9 ][U5 Y10 V5 Y11]
[U6 Y12 V6 Y13][U7 Y14 V7 Y15]

YUV422P 格式(又叫做 I422)

YUV422P 格式,又叫做 I422,采用的是平面格式进行存储,先存储所有的 Y 分量,再存储所有的 U 分量,再存储所有的 V 分量。

存储时:

Y0  Y1  Y2  Y3  Y4  Y5  Y6  Y7  
Y8  Y9  Y10 Y11 Y12 Y13 Y14 Y15 
U0  U2  U4  U6  U8  U10 U12 U14 
V1  V3  V5  V7  V9  V11 V13 V15

对 U,V 分量重新编号:

Y0  Y1  Y2  Y3  Y4  Y5  Y6  Y7  
Y8  Y9  Y10 Y11 Y12 Y13 Y14 Y15 
U0  U1  U2  U3  U4  U5  U6  U7 
V0  V1  V2  V3  V4  V5  V6  V7

基于 YUV420 采样的格式

YUV420P 和 YUV420SP 都是基于 Planar 平面模式进行存储的。

4x4 像素 YUV420 采样:

-1234
1Y0 U0 -Y1 - -Y2 U2 -Y3 - -
2Y4 - V4Y5 - -Y6 - V6Y7 - -
3Y8 U8 -Y9 - -Y10 U10 -Y11 - -
4Y12 - V12Y13 - -Y14 - V14Y15 - -

YUV420P 类型

YUV420P 类型先存储所有的 Y 分量后,会先存储所有的 U 分量或者 V 分量。
YU12 和 YV12 格式都属于 YUV420P 类型,即先存储 Y 分量,再存储 U、V 分量,区别在于:YU12 是先 Y 再 U 后 V,而 YV12 是先 Y 再 V 后 U 。
YU12 格式(又叫做I420)
YU12 是先 Y 再 U 后 V

存储时:

Y0  Y1  Y2  Y3  Y4  Y5  Y6  Y7  
Y8  Y9  Y10 Y11 Y12 Y13 Y14 Y15 
U0  U2  U8  U10 V4  V6  V12 V14

对 U,V 分量重新编号:

Y0  Y1  Y2  Y3  Y4  Y5  Y6  Y7  
Y8  Y9  Y10 Y11 Y12 Y13 Y14 Y15 
U0  U1  U2  U3  V0  V1  V2  V3 
YV12 格式
YV12 是先 Y 再 V 后 U

存储时:

Y0  Y1  Y2  Y3  Y4  Y5  Y6  Y7  
Y8  Y9  Y10 Y11 Y12 Y13 Y14 Y15 
V4  V6  V12 V14 U0  U2  U8  U10 

对 V,U 分量重新编号:

Y0  Y1  Y2  Y3  Y4  Y5  Y6  Y7  
Y8  Y9  Y10 Y11 Y12 Y13 Y14 Y15 
V0  V1  V2  V3  U0  U1  U2  U3  

YUV420SP 类型

YUV420SP 类型先存储所有的 Y 分量后,是按照 UV 或者 VU 的交替顺序进行存储。
NV12 和 NV21 格式都属于 YUV420SP 类型。它也是先存储了 Y 分量,但接下来并不是再存储所有的 U 或者 V 分量,而是把 UV 分量交替连续存储。
NV12 格式
NV12 是 iOS 中有的模式,它的存储顺序是先存 Y 分量,再 UV 进行交替存储。

存储时:

Y0  Y1  Y2  Y3  Y4  Y5  Y6  Y7  
Y8  Y9  Y10 Y11 Y12 Y13 Y14 Y15 
U0  V4  U2  V6  U8  V12 U10 V14

对 U,V 分量重新编号:

Y0  Y1  Y2  Y3  Y4  Y5  Y6  Y7  
Y8  Y9  Y10 Y11 Y12 Y13 Y14 Y15 
U0  V0  U1  V1  U2  V2  U3  V3 
NV21 格式
NV21 是 Android 中有的模式,它的存储顺序是先存 Y 分量,在 VU 交替存储。

存储时:

Y0  Y1  Y2  Y3  Y4  Y5  Y6  Y7  
Y8  Y9  Y10 Y11 Y12 Y13 Y14 Y15 
V4  U0  V6  U2  V12 U8  V14 U10 

对 U,V 分量重新编号:

Y0  Y1  Y2  Y3  Y4  Y5  Y6  Y7  
Y8  Y9  Y10 Y11 Y12 Y13 Y14 Y15 
V0  U0  V1  U1  V2  U2  V3  U3   

参考资料:

维基百科-YUV

维基百科-YCbCr

百度百科-YUV

百度百科-YCbCr

一文读懂 YUV 的采样与格式



binglingziyu
3 声望4 粉丝