[基础] YUV 格式简介
程序员文章站
2022-07-02 08:52:03
...
【音视频基础系列】
YUV格式简介 (本文)
色彩空间简介(YUV与RGB转换)
分类
YUV格式按照存储可分为packed formats和planar formats两类。
- packed formats
指Y,U(Cb),V(Cr) packed,图像以像素为单位存储;
- planar formats
指每个分量分开存储,三个分量依次存储。
YUV格式按照存储精度(bpp),又可分为4:2:0, 4:2:2, 4:4:4等。
因为人眼对于色度分量较为不敏感,所以视频编码使用的原始序列多是YUV 4:2:0格式。
定义
- packed yuv
Label | FOURCC in Hex | Bits per pixel | Description |
---|---|---|---|
AYUV | 0x56555941 | 32 | Combined YUV and alpha |
CLJR | 0x524A4C43 | 8 | Cirrus Logic format with 4 pixels packed into a u_int32. A form of YUV 4:1:1 wiht less than 8 bits per Y, U and V sample. |
cyuv | 0x76757963 | 16 | Essentially a copy of UYVY except that the sense of the height is reversed - the image is upside down with respect to the UYVY version. |
GREY | 0x59455247 | 8 | Apparently a duplicate of Y800 (and also, presumably, “Y8 “) |
IRAW | 0x57615349 | ? | Intel uncompressed YUV. I have no information on this format - can you help? |
IUYV | 0x56595549 | 16 | Interlaced version of UYVY (line order 0, 2, 4,….,1, 3, 5….) registered by Silviu Brinzei of Lead Technologies. |
IY41 | 0x31345949 | 12 | Interlaced version of Y41P (line order 0, 2, 4,….,1, 3, 5….) registered by Silviu Brinzei of Lead Technologies. |
IYU1 | 0x31555949 | 12 | 12 bit format used in mode 2 of the IEEE 1394 Digital Camera 1.04 spec. This is equivalent to Y411 |
IYU2 | 0x32555949 | 24 | 24 bit format used in mode 0 of the IEEE 1394 Digital Camera 1.04 spec |
UYNV | 0x564E5955 | 16 | A direct copy of UYVY registered by NVidia to work around problems in some old codecs which did not like hardware which offered more than 2 UYVY surfaces. |
UYVP | 0x50565955 | 24? | YCbCr 4:2:2 extended precision 10-bits per component in U0Y0V0Y1 order. Registered by Rich Ehlers of Evans & Sutherland. (Awaiting confirmation of component packing structure) |
UYVY | 0x59565955 | 16 | YUV 4:2:2 (Y sample at every pixel, U and V sampled at every second pixel horizontally on each line). A macropixel contains 2 pixels in 1 u_int32. |
V210 | 0x30313256 | 32 | 10-bit 4:2:2 YCrCb equivalent to the Quicktime format of the same name. |
V422 | 0x32323456 | 16 | I am told that this is an upside down version of UYVY. |
V655 | 0x35353656 | 16? | 16 bit YUV 4:2:2 format registered by Vitec Multimedia. I have no information on the component ordering or packing. |
VYUY | 0x59555956 | ? | ATI Packed YUV Data (format unknown but you can get hold of a codec supporting it here) |
Y422 | 0x32323459 | 16 | Direct copy of UYVY as used by ADS Technologies Pyro WebCam firewire camera. |
YUY2 | 0x32595559 | 16 | YUV 4:2:2 as for UYVY but with different component ordering within the u_int32 macropixel. |
YUYV | 0x56595559 | 16 | Duplicate of YUY2 |
YUNV | 0x564E5559 | 16 | A direct copy of YUY2 registered by NVidia to work around problems in some old codecs which did not like hardware which offered more than 2 YUY2 surfaces. |
YVYU | 0x55595659 | 16 | YUV 4:2:2 as for UYVY but with different component ordering within the u_int32 macropixel. |
Y41P | 0x50313459 | 12 | YUV 4:1:1 (Y sample at every pixel, U and V sampled at every fourth pixel horizontally on each line). A macropixel contains 8 pixels in 3 u_int32s. |
Y411 | 0x31313459 | 12 | YUV 4:1:1 with a packed, 6 byte/4 pixel macroblock structure. |
Y211 | 0x31313259 | 8 | Packed YUV format with Y sampled at every second pixel across each line and U and V sampled at every fourth pixel. |
Y41T | 0x54313459 | 12 | Format as for Y41P but the lsb of each Y component is used to signal pixel transparency . |
Y42T | 0x54323459 | 16 | Format as for UYVY but the lsb of each Y component is used to signal pixel transparency . |
YUVP | 0x50565559 | 24? | YCbCr 4:2:2 extended precision 10-bits per component in Y0U0Y1V0 order. Registered by Rich Ehlers of Evans & Sutherland. |
Y800 | 0x30303859 | 8 | Simple, single Y plane for monochrome images. |
Y8 | 0x20203859 | 8 | Duplicate of Y800 as far as I can see. |
- planar formats
Label | FOURCC in Hex | Bits per pixel | Description |
---|---|---|---|
YVU9 | 0x39555659 | 9 | 8 bit Y plane followed by 8 bit 4x4 subsampled V and U planes. Registered by Intel. |
YUV9 | 0x39565559 | 9? | Registered by Intel. I have no other information on this format. Probably a copy of YVU9. |
IF09 | 0x39304649 | 9.5 | As YVU9 but an additional 4x4 subsampled plane is appended containing delta information relative to the last frame. (Bpp is reported as 9) |
YV16 | 0x36315659 | 16 | 8 bit Y plane followed by 8 bit 2x1 subsampled V and U planes. |
YV12 | 0x32315659 | 12 | 8 bit Y plane followed by 8 bit 2x2 subsampled V and U planes. |
I420 | 0x30323449 | 12 | 8 bit Y plane followed by 8 bit 2x2 subsampled U and V planes. |
IYUV | 0x56555949 | 12 | Duplicate FOURCC, identical to I420. |
NV12 | 0x3231564E | 12 | 8-bit Y plane followed by an interleaved U/V plane with 2x2 subsampling |
NV21 | 0x3132564E | 12 | As NV12 with U and V reversed in the interleaved plane |
IMC1 | 0x31434D49 | 12 | As YV12 except the U and V planes each have the same stride as the Y plane |
IMC2 | 0x32434D49 | 12 | Similar to IMC1 except that the U and V lines are interleaved at half stride boundaries |
IMC3 | 0x33434D49 | 12 | As IMC1 except that U and V are swapped |
IMC4 | 0x34434D49 | 12 | As IMC2 except that U and V are swapped |
CLPL | 0x4C504C43 | 12 | Format similar to YV12 but including a level of indirection. |
Y41B | 0x42313459 | 12? | Weitek format listed as “YUV 4:1:1 planar”. I have no other information on this format. |
Y42B | 0x42323459 | 16? | Weitek format listed as “YUV 4:2:2 planar”. I have no other information on this format. |
Y800 | 0x30303859 | 8 | Simple, single Y plane for monochrome images. |
Y8 | 0x20203859 | 8 | Duplicate of Y800 as far as I can see. |
特别关注
4:2:0中的:I420,YV12;NV12和NV21
其实planar formats里描述已经说得非常清楚。
- I420
就是我们最常接触到的yuv420格式,Y plane + (1/2宽, 1/2高)U + (1/2宽, 1/2高)V;
- YV12
是 Y + V + U;
- NV12
是 Y plane + 交织的(interleaved) UV;
- NV21
是 Y plane + 交织的VU。
x264
# x264 x264.h
/* Colorspace type */
#define X264_CSP_MASK 0x00ff /* */
#define X264_CSP_NONE 0x0000 /* Invalid mode */
---------------------1
#define X264_CSP_I420 0x0001 /* yuv 4:2:0 planar */
#define X264_CSP_YV12 0x0002 /* yvu 4:2:0 planar */
#define X264_CSP_NV12 0x0003 /* yuv 4:2:0, with one y plane and one packed u+v */
#define X264_CSP_NV21 0x0004 /* yuv 4:2:0, with one y plane and one packed v+u */
---------------------2
#define X264_CSP_I422 0x0005 /* yuv 4:2:2 planar */
#define X264_CSP_YV16 0x0006 /* yvu 4:2:2 planar */
#define X264_CSP_NV16 0x0007 /* yuv 4:2:2, with one y plane and one packed u+v */
#define X264_CSP_V210 0x0008 /* 10-bit yuv 4:2:2 packed in 32 */
---------------------3
#define X264_CSP_I444 0x0009 /* yuv 4:4:4 planar */
#define X264_CSP_YV24 0x000a /* yvu 4:4:4 planar */
#define X264_CSP_BGR 0x000b /* packed bgr 24bits */
#define X264_CSP_BGRA 0x000c /* packed bgr 32bits */
#define X264_CSP_RGB 0x000d /* packed rgb 24bits */
---------------------4
#define X264_CSP_MAX 0x000e /* end of list */
#define X264_CSP_VFLIP 0x1000 /* the csp is vertically flipped */
#define X264_CSP_HIGH_DEPTH 0x2000 /* the csp has a depth of 16 bits per pixel component */
编码器内部按4大类型处理:invalid,yuv420, yuv422,yuv444
参考
上一篇: YUV格式入门