最近在做视频采集方面的程序,使用vlc对采集到的视频进行播放,但是视频的颜色格式貌似有问题导致无法播放,以下为VLC WIKI关于YUV格式的翻译,
原文地址:https://www.cnblogs.com/ichenwin/articles/10316627.html
wiki原文地址:https://wiki.videolan.org/YUV/
YUV是视频应用中使用的一类像素格式。YUV实际上是所有“YUV”像素格式共有的颜色空间的名称。 与RGB格式(红 - 绿 - 蓝)相对应,YUV颜色用一个称为Y(相当于灰度)的“亮度”分量和两个“色度”分量表示,分别称为U(蓝色投影)和V(红色投影) , YUV由此得名。YUV也可以称为YCbCr,虽然这些术语的含义略有不同,但它们往往会混着并互换使用。本文介绍了VLC媒体播放器环境中最有用的YUV像素格式。 除非另有说明,否则每个成员的用一个八位字节(8位)存储。
平面格式
平面(或有时“三平面”)格式对3种颜色分量中的每一种使用单独的矩阵。 换句话说,存在一个亮度像素值表和用于色度分量的两个单独的表。 这在像素的存储器中的分离表示对于视频编码更方便。
一、平面格式
平面(或有时称“三平面”)格式对3种颜色分量中的每一种使用单独的矩阵。 换句话说,存在一个亮度像素值表和用于色度分量的两个单独的表。 在存储器中将像素分离表示,这对于视频编码更方便。
1. YUV 4:2:0 (I420/J420/YV12)
(1). I420
首先它有一个“亮度”平面Y,然后是U色度平面,最后是V色度平面。
两个色度平面(蓝色和红色投影)在水平和垂直维度以2为倍数进行下采样。也就是说,对于2x2像素块,有4个Y样本,而只有1个U样本和 1 V样本。
对于4个像素,此格式需要4 * 8 + 8 + 8 = 48位,因此其位深度是12。
目前,I420是VLC中最常见的格式。 大多数视频解码器也以I420格式输出原始图像。
以下符号说明:每个字母(Y/U/V)代表一位。
- 对于一个 I420 像素存储的位格式: YYYYYYYY UU VV
- 对于50个像素的 I420 帧: YYYYYYYY*50 UU*50 VV*50 (or Y*8*50 U*2*50 V*2*50 for short)
- 对于n个像素的 I420 帧: Y*8*n U*2*n V*2*n
(2). J420
J420可以说和I420完全相同,但具有全范围(“数字”,0-255)亮度(Y)分量而不是有限范围(“模拟”,16-240)。 色度平面与I420完全相同。
(3). YV12
YV12和I420也几乎完全相同,但U和V平面的顺序是相反的。 从名字来看,“YV”表示平面顺序:先存放Y,然后是V(最后是U)。 “12”指的是像素位深度:每像素12位,与I420相同。
2. YUV 4:2:2 (I422/J422)
(1). I422
与I420一样,I422有一个亮度平面Y和2个色度平面U,V。
不过,在I422中,色度平面(蓝色和红色投影)仅在水平维度上进行下采样,仍然是2倍。因此,在色度平面中存在与亮度平面中相同的行数。
对于2x2像素块,每个有4个Y样本和2个U和2个V样本。 深度为4 * 8 + 2 * 8 + 2 * 8 =每4像素64位,因此每像素16位,位深度是16。
一些视频编解码器支持I422(可选)以获得更高质量的视频编码。
(2). J422
J422与I422几乎完全相同,但具有全范围(“数字”,0-255)亮度(Y)分量而不是有限范围(“模拟”,16-240)。 色度平面与I422完全相同。
3. YUV 4:4:4
(1). I444
类似I420和I422,I444具有一个亮度平面Y和2个色度平面U和V。但色度平面未被下采样:每个像素有3个八位字节值。 因此深度为每像素24位(与RGB24或RGB32一样)。
一些视频编解码器支持I444。
二、 打包格式
在打包格式中,通常只有一个平面,所有亮度和色度数据都是交错的。 这类似于RGB像素格式,仅使用的是不同色彩空间。打包格式在网络摄像头中非常流行。 在硬件中,使用单独的平面是低效的:每个像素需要几次存储器访问。 打包格式更容易,因此使用起来更简单。另一方面,打包格式通常不能处理垂直下采样。 否则扫描线将具有不同的尺寸。 因此,通常,打包格式使用水平方向下采样,步长因子为2(即YUV 4:2:2)。
1. UYVY
也叫Y422或UYNV。
在UYVY中,色度样本被下采样2倍。
若使用UYVY,在连续的2个像素中,由U开始,然后是第一个像素的亮度,然后是V,然后是第二个像素的亮度。UUUUUUUU YYYYYYYY VVVVVVVV YYYYYYYY
2. YUY2
也叫YUYV,V422或YUNV。
在YUY2中,色度样本被下采样2倍。
若使用YUY2,在连续的2个像素中,从第一个像素的亮度开始,然后是U,然后是第二个像素的另一个亮度,然后再次是V.
YUY2和UYVY之间的转换是通过成对交换字节来实现的。
3. YVYU
YVYU和YUY2类似,但U和V顺序是颠倒的。
4. VYUV
待定
三、半平面格式
半平面格式,有两个平面而不是三个平面,一个平面用于亮度,一个平面用于两个色度分量。 它们有时也被称为双平面格式。
(1).NV12
与I420相似,NV12具有一个“亮度”平面Y和一个交错存着U和V的平面。
在NV12中,色度平面(蓝色和红色)在水平和垂直维度中被下采样2倍。
对于2x2像素块,有4个Y样本、1个U和1个样本。
这是NV12的图形表示。 每个字母代表一位:
- 对于一个 NV12 像素: YYYYYYYY UVUV
- 2个 NV12 像素: YYYYYYYYYYYYYYYY UVUVUVUV
- 50个 NV12 像素: Y*8*50 (UV)*2*50
- n个 NV12 像素: Y*8*n (UV)*2*n