课程名称:音视频基础+ffmpeg原理 入门音视频技术开发
课程章节:视频基础知识
课程讲师:李超
课程内容
1.什么是 YUV
YUV(也称 YCbCr),是一种颜色编码,其中Y表示明亮度,U和V表示的则是色度,作用是描述影像色彩及饱和度。
“色度”定义了颜色的两个方面─色调与饱和度,分别用Cr和Cb来表示。其中Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。而Cb反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异。
与RGB视频信号传输相比,它最大的优点在于只需占用极少的频宽。YUV 的亮度信号Y和色度信号U、V是分离的。如果只有Y信号分量而没有U、V分量,那么这样表示的图像就是黑白灰度图像。彩色电视采用YUV空间正是为了用亮度信号Y解决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收彩色电视信号。
RGB 与 YUV 的关系
RGB 通常用于屏幕图像的展示,YUV 用于视频的采集和编码。
RGB 转 YUV:
Y = 0.299*R + 0.587*G + 0.114*B
U = -0.147*R - 0.289*G +0.436*B = 0.492*(B-Y)
V = 0.615*R - 0.515*G - 0.100*B = 0.877*(R-Y)
YUV 转 RGB:
R = Y + 1.140*V
G = Y - 0.394*U - 0.581*V
B = Y + 2.032*U
2.YUV 的常见采集格式
YUV 的常见采样方式有三种:YUV4:4:4、YUV4:2:2、YUV4:2:0,其中YUV4:2:0 是最常用的格式。
4:2:0并不意味着只有 Y、Cb 两个分量,而没有 Cr 分量。它实际指的是对每行扫描线来说,只有一种色度分量,它以 2:1 的抽样率存储。相邻的扫描行存储不同的色度分量,也就是说,如果一行是 4:2:0的话,下一行就是4:0:2,再下一行是4:2:0……以此类推。
- 4:4:4,表示完全取样。
- 4:2:2,表示2:1的水平取样,垂直完全采样。
- 4:2:0,表示2:1的水平取样,垂直2:1采样。
可以这样理解:
- 4:4:4,每一个Y对应一组UV分量,一个YUV占8+8+8 = 24bits 3个字节。
- 4:2:2,每两个Y共用一组UV分量,一个YUV占8+4+4 = 16bits 2个字节。
- 4:2:0,每四个Y共用一组UV分量,一个YUV占8+2+2 = 12bits 1.5个字节。
3.YUV 的存储格式
YUV 的存储格式有两种:planar模式和 packed模式。
planar 模式
对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。
- I420(又称 YU12),首先存储所有Y值,然后是所有U值,最后是所有V值。
- YV12 iOS手机从摄像头采集的预览数据一般都是YV12。首先是所有Y值,然后是所有V值,最后是所有U值。
I420: YYYYYYYY UU VV => YUV420P
YV12: YYYYYYYY VV UU => YUV420P
packed 模式
对于packed的YUV格式,每个像素点的Y、U、V都是连续交叉存储的。
- NV12,android手机从摄像头采集的预览数据一般都是NV21,存储顺序是先存Y,再VU交替存储。
- NV21,NV21存储顺序是先存Y值,再VU交替存储。
NV12: YYYYYYYY UVUV => YUV420SP
NV21: YYYYYYYY VUVU => YUV420SP