【基础知识】YU12、I420、IYUV 是同一种格式

YU12I420IYUV 实际上指的是同一种 YUV 格式 ------即 YUV 4:2:0 平面格式(planar),它们在绝大多数上下文中可以互换使用。下面详细解释它们的关系与细微差异:


✅ 共同点(核心格式)

  • 采样方式 :YUV 4:2:0
    • 亮度 Y:全分辨率(width × height)
    • 色度 U、V:各为 (width/2 × height/2)
  • 内存布局Planar(平面)
    • 先连续存储所有 Y 分量
    • 然后连续存储所有 U 分量
    • 最后连续存储所有 V 分量
  • 总大小width × height × 3 / 2 字节(8-bit 每分量)

内存结构示例(W=4, H=4):

复制代码
YYYYYYYY YYYYYYYY   ← 16 bytes (4×4)
UUUU                ← 4 bytes  (2×2)
VVVV                ← 4 bytes  (2×2)

🔍 各名称来源与使用场景

名称 来源/标准 常见使用环境 备注
I420 FourCC 编码 FFmpeg、WebRTC、GStreamer 最标准的 FourCC 名称
YU12 Linux V4L2 / Mesa Linux 视频框架、DRM、开源驱动 /usr/include/linux/videodev2.h 中定义
IYUV Intel / Windows 早期 DirectShow、Intel 文档 较少用,但含义相同

📌 FourCC 是什么?

FourCC(Four Character Code)是用 4 个 ASCII 字符标识像素格式的标准方式。

  • I420 的 FourCC 字节序为 'I','4','2','0'
  • 注意:有些系统可能用小端序解释,但语义一致。

🧪 验证:它们是否真的相同?

在主流多媒体库中:

  • FFmpeg

    • AV_PIX_FMT_YUV420P 对应的就是 I420/YU12/IYUV。
    • 使用 -pix_fmt yuv420p 输出的原始 YUV 文件就是这种布局。
  • OpenCV

    • 读取 .yuv 文件时,若指定为 I420,则按 Y+U+V 解析。
  • Android NDK / MediaCodec

    • 虽然更常用 NV12,但 I420 也被部分 API 支持。
  • VLC / GStreamer

    • 内部统一称为 I420。

⚠️ 注意事项

  1. 不要与 YV12 混淆

    • YV12 = Y + V + U(U/V 顺序相反)
    • 若误将 YV12 当作 I420 显示,画面会呈现紫绿色偏色
  2. 文件扩展名无标准

    • .yuv 文件本身不包含格式信息,必须额外知道宽高和格式才能正确解析。
  3. 字节对齐问题

    • 某些硬件或 API 要求 Y/U/V 平面的 stride(行字节数)对齐到 16 或 32 字节,即使图像宽度不是偶数。

✅ 总结

名称 是否等价 推荐使用场景
I420 ✅ 是 通用标准(首选)
YU12 ✅ 是 Linux / V4L2 系统
IYUV ✅ 是 老旧 Windows 文档

💡 结论:在 99% 的情况下,YU12 = I420 = IYUV,都是 YUV420 planar(Y+U+V)格式。

相关推荐
彷徨而立2 天前
【基础知识】ANSI、GB2312、UTF-8、Unicode、wchar_t 的含义和区别
基础知识
一支闲人1 个月前
单片机学习的前提知识储备
单片机·基础知识
小龙2 个月前
【理论知识】石油测井技术全景概览
基础知识·岩性识别·石油测井·测井技术
一支闲人2 个月前
CAN:STM32 CAN外设2
stm32·单片机·基础知识·can协议·stm外设
一支闲人2 个月前
STM32 CAN外设1
stm32·单片机·嵌入式硬件·基础知识·cna协议
一支闲人2 个月前
CAN总线协议:位同步
stm32·单片机·基础知识·can总线协议
一支闲人3 个月前
带你了解STM32:SPI通信(硬件部分)
stm32·单片机·嵌入式硬件·基础知识
一支闲人3 个月前
带你了解STM32:SPI通信(软件部分)
stm32·单片机·嵌入式硬件·基础知识·适用于新手小白
一支闲人3 个月前
带你了解STM32:I2C通信(第二部分)
stm32·单片机·嵌入式硬件·基础知识·适用于新手小白