0%

视音频技术-YUV视频像素数据

1、YUV视频像素数据

1.1、YUV设计

YUV 是一种彩色编码系统,主要用在视频、图形处理流水线中。相对于 RGB 颜色空间,设计 YUV 的目的就是为了编码、传输的方便,减少带宽占用和信息出错。

Y’UV、YUV、YCbCr、YPbPr 几个概念其实是一回事儿。由于历史关系,Y’UV、YUV 主要是用在彩色电视中,用于模拟信号表示。YCbCr 是用在数字视频、图像的压缩和传输,如 MPEG、JPEG。通常所讲的 YUV 其实就是指 YCbCr,其中Y 表示亮度(luma),CbCr 表示色度(chroma)。

Y’UV 设计的初衷是为了使彩色电视能够兼容黑白电视。对于黑白电视信号,没有色度信息也就是(UV),那么在彩色电视显示的时候指显示亮度信息。Y’UV 不是 Absolute Color Space,只是一种 RGB 的信息编码,实际的显示还是通过 RGB 来显示。Y’,U,V 叫做不同的 component 。

人眼的视觉特点是对亮度更敏感,对位置、色彩相对来说不敏感。在视频编码系统中为了降低带宽,可以保存更多的亮度信息(luma),保存较少的色差信息(chroma)。这叫做 chrominance subsamping, 色度二次采样。原则:在数字图像中,(1) 每一个图形像素都要包含 luma(亮度)值;(2)几个图形像素共用一个 Cb + Cr 值,一般是 2、4、8 个像素。

1.2、图形像素与亮度、色度的关系

图形像素:
对于一个 w 宽、h 高的像素图,在水平方向,一行有 w 个像素;在垂直方向,一列有 h 个像素,整个图形有 w * h 个像素。

如果用 YCbCr 像素格式来表示像素图,需搞清楚亮度和图形像素的关系,色度和图形像素的关系。

YUV/YCbCr 解释
Y 明亮度
UV/CbCr 色度

yuv 各种格式后面数字的含义:

1
2
3
4
左侧一列,每一个小矩形是图形像素表示,黑框矩形是色度像素表示,小黑点是表示色度像素值(Cb+Cr),表示图形像素和色度像素在水平和垂直方向的比例关系。
4:4:0 水平方向是1/1,垂直方向是1/2,表示一个色度像素对应了两个图形像素。
4:2:2 水平方向是1/2,垂直方向是1/1,表示一个色度像素对应了两个图形像素。
4:2:0 水平方向是1/2,垂直方向是1/2,表示一个色度像素对应了四个图形像素。
1
2
3
4
右侧一列是二次采样模式记号表示,是 J:a:b 模式,实心黑色圆圈表示包含色度像素(Cb+Cr),空心圆圈表示不包含色度像素。对于 J:a:b 模式,主要是围绕参考块的概念定义的,这个参考块是一个 J x 2 的矩形,J 通常是 4。这样,此参考块就是宽度有 4 个像素、高度有 2 个像素的矩形。a 表示参考块的第一行包含的色度像素样本数,b 表示在参考块的第二行包含的色度像素样本数。
4:4:0 参考块第一行包含四个色度样本,第二行没有包含色度样本。
4:2:2 参考块第一行包含两个色度样本,第二行也包含两个色度样本,他们是交替出现。
4:2:0 参考块第一行包含两个色度样本,第二行没有包含色度样本。

yuv444,yuv422,yuv420 yuv 等像素格式的本质是:每个图形像素都会包含亮度值,但是某几个图形像素会共用一个色度值,这个比例关系就是通过 4 x 2 的矩形参考块来定的。

1.3、YUV格式

YUV格式 解释
平面格式planar 用三个不同的数组来表示 YCbCr 的三个 Component,每一个 Component 都是通过不同的平面表示。
压缩格式packed 用一个数组表示 YCbCr,每一个 component 是交替出现的。

1.3.1、平面格式

yuv420 planar/yuv420p/i420的位深度
Y、U、V三个平面,每个平面8比特bit二进制数字表示
1
2
3
4
5
6
如果用 yuv420p 来表示分辨率为 1280 * 720 的图片,需要占用多少存储空间呢?

每一个像素都需要一个 luma 值,即 y。那么总共需要 1280 * 720 = 921600 bytes。
每四个像素需要一个 chroma u 值,那么总共需要 1280 * 720 / 4 = 230400 bytes。
每四个像素需要一个 chroma v 值,那么总共需要 1280 * 720 / 4 = 230400 bytes。
把 y、u、v 三个 plane 加起来就是:921600 + 230400 + 230400 = 1382400 bytes。

通过ffmpeg将jpeg转成yuv,生成图形的分辨率是1280*72。

1
ffmpeg -i test.jpeg -s 1280x720 -pix_fmt yuv420p test.yuv

1.3.2、压缩格式

ffmpeg 中对 yuv420p 像素格式大小计算。