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分量

1.FFmpeg学习笔记 - YUV & RGB_第1张图片

常见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 内置的矩阵(如 mat2mat3mat4 )是 列主序,即需要将下列转换矩阵转换成 转置矩阵 !

1.FFmpeg学习笔记 - YUV & RGB_第2张图片

1.FFmpeg学习笔记 - YUV & RGB_第3张图片

五、ffplay播放YUV命令

ffplay -f rawvideo -pixel_format yuv420p -video_size 848x480 ./sintel_yuv420p_848x480.yuv 

其中rawvideo表示播放原始视频,yuv420p表示视频的格式,848x480表示视频的宽高

你可能感兴趣的:(FFmpeg)