音视频原理图像相关概念 ⑤ ( YUV 数据存储 | I444 格式说明 | I422 格式说明 | I420 格式说明 | NV12 格式说明 | NV21 格式说明 )

文章目录

  • 一、 YUV 4:4:4 格式存储
    • 1、I444 格式说明
    • 2、YUV444 格式的优缺点
    • 3、YUV444P 数据存储
  • 二、 YUV 4:2:2 格式存储
    • 1、I422 格式说明
    • 2、YUV422 格式的优缺点
    • 3、YUV422P 数据存储
  • 三、 YUV 4:2:0 格式存储
    • 1、I420 格式说明
    • 2、YUV420 格式的优缺点
    • 3、YUV420P 数据存储
    • 4、NV12 格式数据存储
    • 5、NV21 格式数据存储

一、 YUV 4:4:4 格式存储


1、I444 格式说明

YUV 4:4:4 采样格式 , Y 亮度分量 与 UV 色度分量 的比例是 1:1 ;

如果将 YUV444 采样格式 按照 平面格式 Planar 进行存放 , 那么就是 YUV444P 格式 ;

YUV444P 格式 , 又叫 I444 格式 , 与 FFmpeg 中的 AV_PIX_FMT_YUV444P 像素格式标识符对应 ;

FFmpeg 中的 AV_PIX_FMT_YUV444P 像素格式标识符 说明 :

  • AV_PIX_FMT_ 前缀是 FFmpeg 中 用于标识其内部的像素格式 ;
  • YUV444 表示 每个像素都有独立的Y U V分量 , 色度分量没有进行下采样 , 与亮度分量保持相同的分辨率 ;
  • P 表示 YUV 分量 是 平面格式 存储 的 , 表示 YUV 分量 , 分别存放在 三个不同的数组 中 ; 与之相对的事 打包格式存储 , YUV 分量集中存放在一个数组中 ;

2、YUV444 格式的优缺点

YUV444 格式 提供了高质量的色彩表现 , 因为每个像素都有完整的色彩信息 ;

YUV444 格式 没有进行色度分量的下采样 , 它也需要更多的存储空间来保存图像数据 , 进行数据传输时需要消耗更多的带宽 ;

3、YUV444P 数据存储

YUV444P 数据存储 格式如下图所示 :

不同类型的分量放在不同的数组中 ,

在这里插入图片描述

Y 灰度值 分量 , 存储在 最上面的数组中 , 在下图的 Y0 ~ Y7 的 灰度值 就是存放在一个数组中 ;

在这里插入图片描述

U 色度值 分量 , 存储在 中间数组中 , 在下图的 U0 ~ U7 的 色度值 就是存放在一个数组中 ;

在这里插入图片描述

V 色度值 分量 , 存储在 最下面的数组中 , 在下图的 V0 ~ V7 的 色度值 就是存放在一个数组中 ;

在这里插入图片描述

二、 YUV 4:2:2 格式存储


1、I422 格式说明

YUV 4:2:2 采样格式 , Y 亮度分量 与 UV 色度分量 的比例是 2:1 ;

如果将 YUV422 采样格式 按照 平面格式 Planar 进行存放 , 那么就是 YUV422P 格式 ;

YUV422P 格式 , 又叫 I422 格式 , 与 FFmpeg 中的 AV_PIX_FMT_YUV422P 像素格式标识符对应 ;

FFmpeg 中的 AV_PIX_FMT_YUV422P 像素格式标识符 说明 :

  • AV_PIX_FMT_ 前缀是 FFmpeg 中 用于标识其内部的像素格式 ;
  • YUV422 表示 每个像素都有独立的 Y 亮度分量 , UV 色度分量 的采样率则是亮度分量的一半 , 并且是水平方向上交替进行的 ;
  • P 表示 YUV 分量 是 平面格式 存储 的 , 表示 YUV 分量 , 分别存放在 三个不同的数组 中 ; 与之相对的事 打包格式存储 , YUV 分量集中存放在一个数组中 ;

2、YUV422 格式的优缺点

YUV422P 格式 通常 用于需要 较高图像质量 , 但又希望 减少数据量的应用场景 , 如 : 标准清晰度电视 , 视频会议等 ;

由于 UV 色度分量的水平采样率减半 , 它可以节省一定的存储空间 , 同时在大多数观看条件下仍能保持较好的图像质量 ;

3、YUV422P 数据存储

YUV422P 数据存储 格式如下图所示 :

不同类型的分量放在不同的数组中 ,

在这里插入图片描述

Y 灰度值 分量 , 存储在 最上面的数组中 , 在下图的 Y0 ~ Y7 的 灰度值 就是存放在一个数组中 ;

在这里插入图片描述

U 色度值 分量 , 存储在 中间数组中 , 在下图的 U0 ~ U3 的 色度值 就是存放在一个数组中 , U 的个数只有 4 个 , 是 Y 分量个数的一半 ;

在这里插入图片描述

V 色度值 分量 , 存储在 最下面的数组中 , 在下图的 V0 ~ V3 的 色度值 就是存放在一个数组中 , V 分量 的个数只有 4 个 , 是 Y 分量 个数的一半 ;

在这里插入图片描述

上面的 数据 中 ,

  • Y0 和 Y1 灰度值 使用 U0V0 色度值 , 2 个像素用了 4 字节 , 一个像素 2 字节 ;
  • Y2 和 Y3 灰度值 使用 U1V1 色度值 , 2 个像素用了 4 字节 , 一个像素 2 字节 ;
  • Y4 和 Y5 灰度值 使用 U2V2 色度值 , 2 个像素用了 4 字节 , 一个像素 2 字节 ;
  • Y6 和 Y7 灰度值 使用 U3V3 色度值 , 2 个像素用了 4 字节 , 一个像素 2 字节 ;

三、 YUV 4:2:0 格式存储


1、I420 格式说明

YUV 4:2:0 采样格式 , Y 亮度分量 与 UV 色度分量 的比例是 4:1 ;

如果将 YUV420 采样格式 按照 平面格式 Planar 进行存放 , 那么就是 YUV420P 格式 ;

YUV420P 格式 , 又叫 I420 格式 , 与 FFmpeg 中的 AV_PIX_FMT_YUV420P 像素格式标识符对应 ;

FFmpeg 中的 AV_PIX_FMT_YUV420P 像素格式标识符 说明 :

  • AV_PIX_FMT_ 前缀是 FFmpeg 中 用于标识其内部的像素格式 ;
  • YUV420 表示 每个像素都有独立的 Y 亮度分量 , UV 色度分量 在水平和垂直方向上 的采样率都是亮度分量 Y 的一半 , 每个 2x2 的像素块共享一对色度分量值 ;
  • P 表示 YUV 分量 是 平面格式 存储 的 , 表示 YUV 分量 , 分别存放在 三个不同的数组 中 ; 与之相对的事 打包格式存储 , YUV 分量集中存放在一个数组中 ;

2、YUV420 格式的优缺点

YUV422P 格式 通常用于视频压缩 和 传输领域 , 适用于 数字电视 / 流媒体 / 视频会议以及许多其他需要高效视频编码的场景 ;

YUV422P 格式 的 UV 色度分量的采样率较低 , 它可以显著减少图像数据的大小 , 同时仍然保持良好的视觉效果 , 特别是对于人眼对亮度信息更为敏感的特性而言 ;

3、YUV420P 数据存储

YUV420P 数据存储 格式如下图所示 :

不同类型的分量放在不同的数组中 ,

在这里插入图片描述

  • Y 灰度值 分量 , 存储在 最上面的数组中 , 在下图的 Y0 ~ Y7 的 灰度值 就是存放在一个数组中 ;
  • U 色度值 分量 , 存储在 中间数组中 , 在下图的 U0 ~ U3 的 色度值 就是存放在一个数组中 , U 的个数只有 4 个 , 是 Y 分量个数的一半 ;
  • V 色度值 分量 , 存储在 最下面的数组中 , 在下图的 V0 ~ V3 的 色度值 就是存放在一个数组中 , V 分量 的个数只有 4 个 , 是 Y 分量 个数的一半 ;

上面的 数据 中 ,

  • Y0 , Y1 , Y4 , Y5 灰度值 使用 U0V0 色度值 , 4 个像素用了 6 字节 , 一个像素 1.5 字节 ;
  • Y2 , Y3 , Y6 , Y7 灰度值 使用 U1V1 色度值 , 4 个像素用了 6 字节 , 一个像素 1.5 字节 ;
  • Y8 , Y9 , Y12 , Y13 灰度值 使用 U2V2 色度值 , 4 个像素用了 6 字节 , 一个像素 1.5 字节 ;
  • Y10 , Y11 , Y14 , Y15 灰度值 使用 U3V3 色度值 , 4 个像素用了 6 字节 , 一个像素 1.5 字节 ;

4、NV12 格式数据存储

NV12 图片颜色编码格式 也是 YUV 420 格式的 , 又称为 " YUV420SP 格式 " , 只是其 UV 色度值的排列方式 与 I420 格式不同 ;

  • 在 I420 格式中 , Y 分量是 平面格式 , UV 分量 也是平面格式 , Y 和 U 和 V 都分别在三个不同的数组中 ;
  • 在 NV12 格式中 , Y 分量是 平面格式 , UV 分量 是打包格式 , Y 放在一个单独的数组中 , UV 放在一个单独的数组中 ;

在这里插入图片描述

5、NV21 格式数据存储

NV21 与 NV12 的区别就是 , UV 分量的顺序不同 ,

  • NV12 中 , U 分量在前 , V 分量在后 ;
  • NV21 中 , V 分量在前 , U 分量在后 ;

在这里插入图片描述