1.FFmpeg学习笔记 - YUV & RGB
一、RGB
RGB存储方式:通常R、G、B每分量占一个字节,存储方式为:RGBRGBRGB......
二、YUV
Y表示亮度,UV分别表示色度和饱和度。
YUV格式有两大类:planar和packed
planar:Y、U、V三分量连续储存,即先存储所有的Y,然后存储所有的U,然后所有的V
packed:Y、U、V三分量交错存储,类似于RGB存储方式。
YUV采样方式有多种,常用的如YUV4:4:4,YUV4:2:2,YUV4:2:0,见下图所示:
1)YUV4:4:4表示每一个Y对应一组UV分量
1)YUV4:2:2表示每两个Y对应一组UV分量
1)YUV4:2:0表示每四个Y对应一组UV分量
常见YUV格式分析:
1)YUYV格式(属于YUV4:2:2, packed)
排列方式:Y1 U1 Y2 V1 Y3 U3 Y4 V3 ....
2)UYVY格式(属于YUV4:2:2, packed)
排列方式:U1 Y1 V1 Y2 U3 Y3 V3 Y4 ....3)YUV422P格式(属于YUV4:2:2, planar)
排列方式:Y1 Y2 Y3 Y4 Y5 Y6 ... U1 U3 U5 ... V1 V3 V5 ...
4)I420、YU12(属于YUV4:2:0, YUV420p, planar)
YUV420p: Y、U、V三分量连续存储
排列方式:
Y01 Y02 Y03 Y04
Y11 Y12 Y13 Y14
U1 U3
V1 V3
5)YV12(属于YUV4:2:0, YUV420p, planar)
排列方式:
Y01 Y02 Y03 Y04
Y11 Y12 Y13 Y14
V1 V3
U1 U3
6)NV12(属于YUV4:2:0, YUV420sp)
YUV420sp:又叫bi-planer或two-planer双平面,Y一个平面,UV在同一个平面交叉存储。
这两种格式中,Y分量连续排列,UV分量交错排列:
Y01 Y02 Y03 Y04
Y11 Y12 Y13 Y14
U1 V1 U3 V3
7)NV21(属于YUV4:2:0, YUV420sp)
这两种格式中,Y分量连续排列,VU分量交错排列:
Y01 Y02 Y03 Y04
Y11 Y12 Y13 Y14
V1 U1 V3 U3
三、取值范围
rgb如果是一个字节的话,取值范围是0-255。
y:0-255
u、v:-128 ~ 127,但是存储时,为了方便存储,跟y数据一样,统一用一个无符号字节表示,取值范围要转换成0 ~ 255。
四、RGB与YUV相互转换
注意: 在 OpenGL
内置的矩阵(如 mat2
、mat3
、mat4
)是 列主序,即需要将下列转换矩阵转换成 转置矩阵 !
五、ffplay播放YUV命令
ffplay -f rawvideo -pixel_format yuv420p -video_size 848x480 ./sintel_yuv420p_848x480.yuv
其中rawvideo表示播放原始视频,yuv420p表示视频的格式,848x480表示视频的宽高