YUV是一种颜色编码系统,将**亮度(Y)和色度(U、V)**分离存储广泛应用于视频编解码、流媒体等领域。与 RGB 不同,YUV 将亮度信息(Luminance)和色度信息(Chrominance)分离,这使得它在压缩和带宽优化方面具有巨大优势。
• Y (Luminance/Luma): 亮度分量。代表图像的灰度信息。人眼对亮度非常敏感。
• U (Cb - Chroma Blue): 蓝色色度分量。表示颜色相对于灰色的蓝色偏移量。
• V (Cr - Chroma Red): 红色色度分量。表示颜色相对于灰色的红色偏移量。
为什么使用 YUV?
1. 兼容性: Y 分量可以直接用于黑白电视显示。
2. 压缩效率: 人眼对色度的敏感度远低于对亮度的敏感度。因此,我们可以保留完整的 Y 数据,但降低 U 和 V 的分辨率(即色度 subsampling/下采样),从而大幅减少数据量而不明显影响视觉质量。
一、YUV格式分类
1.1 色度采样基础定义
1.1.1 YUV 4:4:4
每 1 个 Y 对应 1 个 U、1 个 V,无压缩,画质无损
- 像素块:2×2,4Y 4U 4V
1.1.2 YUV 4:2:2
水平方向色度减半,垂直完整
- 像素块:2×1,2Y 1U 1V
1.1.3 YUV 4:2:0(最常用:视频、直播、H.264/H.265)
水平 + 垂直色度各减半,压缩比最高
- 像素块:2×2,4Y 1U 1V
1.1.4 YUV 4:1:1
水平色度 1/4,垂直完整,极少使用
1.2存储格式分类
1.2.1 平面格式(Planar)
数据按通道分离存储,每个通道占据独立的内存区域:
| 格式 | 布局 | 子采样 | 每像素比特 | 场景 | |
|---|---|---|---|---|---|
| YUV420 Planar | I420(标准 YUV420P) | YYYY UU VV | 4:2:0 | 12 bpp | FFmpeg、播放器、通用图像处理 |
| YV12 | YYYY VV UU | 4:2:0 | 12 bpp | Windows 老式摄像头、DirectShow 常用 | |
| YUV422 Planar | I422(YUV422P) | Y + U + V分三块 | 4:2:2 | 16 bpp | |
| YV16 | Y + V + U分三块 | ||||
| YUV444 Planar | I444/YUV444P | Y + U + V独立平面 | 4:4:4 | 24 bpp | 无损,剪辑、调色专用 |
| I400 | 仅Y | - | 8 bpp(灰度) |
1.2.2 双平面格式(Biplanar)
Y平面独立,UV交织存储:
| 格式 | UV 平面排布 | 使用场景 |
|---|---|---|
| NV12 | 4:2:0 UV交错 | PC 硬解、Windows/Mac/Intel/NVIDIA 通用(最主流双平面) |
| NV21 | 4:2:0 VU交错 | Android Camera 原生输出 |
| NV16 | 4:2:2 UV交错 | 高帧率采集卡、部分 ARM 硬件 |
| NV61 | 4:2:2 VU交错 | |
| NV24 | 4:4:4 UV交错 | 专业采集卡使用 |
| NV42 | 4:4:4 VU交错 |
1.3 打包格式(Packed)
1.3.1,4:2:2 Packed(2 像素共用 1 组 CbCr)
| 格式 | 字节顺序 | 子采样 | 应用场景 |
|---|---|---|---|
| YUY2/ YUYV | Y0 U0 Y1 V0 Y2 U1 Y3 V1... | 4:2:2 | Windows 摄像头、DirectShow 默认输出格式。 |
| UYVY | U0 Y0 V0 Y1 U1 Y2 V1 Y3... | 4:2:2 | 专业 SDI 采集卡、Linux v4l2 常用,带宽和 YUY2 完全一致。专业剪辑、调色硬件链路首选 |
| VYUY | V Y U Y | ||
| YVYU | Y0 V0 Y1 U0 | 4:2:2 | UV 顺序颠倒,小众采集设备专用。 |
1.3.2 4:4:4 Packed
UYVA / YUVA
4:4:4 带 Alpha 透明通道,UI、渲染合成用
BGR/YUV 混合打包:AYUV、VUYA
1.3.3 4:1:1 Packed(极少用)
Y41P、Y411
老式低码率摄像头,现已淘汰
1.4 特殊扩展YUV
1.4.1 带 Alpha 透明通道
- AYUV:444 packed 8bit 带 Alpha
- YA16:平面 YUV+Alpha
- YUVA444P:444 平面带透明通道
1.4.2 高位深影视专业格式(10/12/16bit)
- P010、I010、I210、I410
- v210:422 10bit packed(专业 SDI、达芬奇)
- v410:444 10bit packed
1.4.3 隔行专用 YUV
YUV420i、NV12i:隔行扫描视频(老式标清电视)
1.4.4 压缩型YUV(内存不标准采样,硬件专用)
- YUYV_420、NV12_TILED:GPU 瓦片存储,显卡内部私有格式
- MIPI YUV:手机摄像头硬件私有打包格式
1.4.5 灰度单通道
Y8 / GRAY8:只有 Y 分量,无 U/V,纯黑白图
二、采样格式
2.1 采样图
YUV 格式通常用 A:B:C 或 A:B:C:D 来表示采样比例。最常用的是 4:2:0。
YUV444(无压缩): Y U V | Y U V | Y U V | Y U V Y U V | Y U V | Y U V | Y U V Y U V | Y U V | Y U V | Y U V Y U V | Y U V | Y U V | Y U V YUV422(水平子采样): Y U | Y V | Y U | Y V Y U | Y V | Y U | Y V Y U | Y V | Y U | Y V Y U | Y V | Y U | Y V YUV420(水平+垂直子采样): Y | Y | Y | Y Y | Y | Y | Y U V U V ... (共享) (共享)2.2 对比图
| 格式 | 描述 | 数据量占比 | 应用场景 |
| YUV444 | 每个像素都有独立的 Y, U, V。无压缩。 | 100% (3 bytes/pixel) | 高端视频编辑,无损存储 |
| YUV422 | 每两个水平相邻像素共享一组 U, V。垂直方向全采样。 | 66% (2 bytes/pixel) | 高清视频接口 (HDMI, SDI) |
| YUV420 | 每 2x2 的四个像素共享一组 U, V。 | 50% (1.5 bytes/pixel) | 视频压缩标准 (H.264, VP8, WebRTC) |
三、YUV与YCbCr区别
YUV与YCbCr的区别,YUV 是模拟电视时代的模拟信号标准;YCbCr 是数字采样后的数字编码标准。日常开发里大家口语混称,但原理、取值、用途完全不一样。
| 维度 | YUV | YCbCr |
|---|---|---|
| 信号类型 | 模拟连续电压 | 数字离散采样 |
| 分量 | Y、U、V | Y、Cb、Cr |
| 色度特性 | U/V 含负数 | Cb/Cr 偏移后全正数 |
| 取值 | 无固定数字区间 | 分 0~255 全幅 /16~235 限幅 |
| 使用场景 | 老式模拟电视、模拟色差线 | 所有数字视频、图片、摄像头编码 |
| 程序像素格式 | 不存在 | NV12/YUY2/I420 等全是它 |
四、YUV格式计算公式
统一变量:
- W:图像宽度(像素)
- H:图像高度(像素)
- BitDepth:单分量位深,常用 8bit / 10bit / 12bit
4.1, 4:4:4 格式YUV,
每个像素有1个Y,1个U,1个V,每个像素的总为3个 BitDepth,
总字节公式:
4.2, 4:2:2 格式YUV
每 2 个像素共用一组 CbCr 2 像素总分量:2Y + 1Cb + 1Cr = 4 个BitDepth
总字节公式:
4.3, 4:2:0 格式YUV
2×2 块 4 个像素共用一组 CbCr 4 像素分量:4Y + 1Cb + 1Cr = 6个BitDepth
总字节公式:
4.4 单通道灰度 Y8/GRAY8
只有 Y,无色度
4.5 计算查表
根据以上公式计算的表,在实际的计算中可以直接查表进行计算
| 单分量位深 | ||||
|---|---|---|---|---|
| 采样 | 代表格式 | 8bit | 10bit | 12bit |
| 420 | NV12/I420/NV21 | ×1.5 | ×1.875 | ×2.25 |
| 422 | YUYV/YUY2/UYVY/NV16 | ×2 | ×2.5 | ×3 |
| 444 | I444/NV24 | ×3 | ×3.75 | ×4.5 |
| 灰度 Y8 | GRAY8 | ×1 | / | / |
例:
720P(1280×720) NV12: 1280 × 720 × 1.5 = 1382400 Byte ≈ 1.32 MB