前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >YUV 格式详解-史上最全

YUV 格式详解-史上最全

原创
作者头像
Redknot
修改2021-01-25 14:37:03
2.2K1
修改2021-01-25 14:37:03
举报
文章被收录于专栏:自己动手写 H.264 解码器

引言

音视频领域的人恐怕没有人不知道 YUV,但是 YUV 本身有好多种变种,名称也各种各样,本文就位大家总结一下YUV 的各种格式。

在开始之前,先向大家介绍一款 YUV 图像的查看工具---YUV Eye,大家可以使用这个工具,查看 YUV 图像。有的时候在进行 Debug 的时候,有这样一个工具会方便很多。

https://www.zzsin.com/YUVEye.html

首先先介绍一下 YUV,我们都知道,YUV 是一种表示颜色的模型。但是我们常说的 YUV ,其实指的是 YCbCr,其中Y是指亮度分量,Cb指蓝色色度分量,而Cr指红色色度分量,是标准 YUV 的一个翻版,此文中,我们就用 YUV 指代 YCbCr 了。

我们再来看一下 YUV 的常见格式。你一定看过很多文章介绍 YUV 格式,但是对于 YUV 到底存在哪些格式,每种格式又有哪些变种,哪些别名,可能并没有一个系统的认识。没关系,我们用这篇文章帮你总结分析。

我们对 YUV 格式先进性一下分类,大家可以参考下图。

YUVEye
YUVEye

分类标准

首先,我们可以将 YUV 格式按照数据大小分为三个格式,YUV 420,YUV 422,YUV 444。由于人眼对 Y 的敏感度远超于对 U 和 V 的敏感,所以有时候可以多个 Y 分量共用一组 UV,这样既可以极大得节省空间,又可以不太损失质量。这三种格式就是按照人眼的特性制定的。

  • YUV 420,由 4 个 Y 分量共用一套 UV 分量,
  • YUV 422,由 2 个 Y 分量共用一套 UV 分量
  • YUV 444,不共用,一个 Y 分量使用一套 UV 分量

按照多个 Y 分量共用一个 UV 的方式,我们可以把 YUV 分为 420,422,444 三种类型,而在这三种类型之下,我们又可以按照 YUV 的排列储存顺序,将其细分为好多种格式,这些格式数量繁多,又不好记忆,这为我们学习过程中造成了不少困难。下面我就为大家一一介绍。

首先,我们将可以按照 YUV 的排列方式,再次将 YUV 分成三个大类,Planar,Semi-Planar 和 Packed。

  • Planar YUV 三个分量分开存放
  • Semi-Planar Y 分量单独存放,UV 分量交错存放
  • Packed YUV 三个分量全部交错存放

按照这三种方式,我们就可以将 YUV 格式进行比较细致的分类了。

具体分类

  • I420(属于 YUV 420 Plannar)

I420 是 YUV 420 Planar 的一种,YUV 分量分别存放,先是 w * h 长度的 Y,后面跟 w * h * 0.25 长度的 U, 最后是 w * h * 0.25 长度的 V,总长度为 w * h * 1.5。

代码语言:txt
复制
Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

U U U

U U U

U U U

V V V

V V V

V V V
  • YV12(属于 YUV 420 Plannar)

YV12 是 YUV 420 Planar 的一种,YUV 分量分别存放,先是 w * h 长度的 Y,后面跟 w * h * 0.25 长度的 V, 最后是 w * h * 0.25 长度的 U,总长度为 w * h * 1.5。与 I420 不同的是,YV12 是先 V 后 U

代码语言:txt
复制
Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

V V V

V V V

V V V

U U U

U U U

U U U
  • NV12(属于 YUV 420 Semi-Planar)

NV12 是 YUV 420 Semi-Planar 的一种,Y 分量单独存放,UV 分量交错存放,UV 在排列的时候,从 U 开始。总长度为 w * h * 1.5。

代码语言:txt
复制
Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

U V U V U V

U V U V U V

U V U V U V
  • NV21(属于 YUV 420 Semi-Planar)

NV21 是 YUV 420 Semi-Planar 的一种,Y 分量单独存放,UV 分量交错存放,与 NV12 不同的是,UV 在排列的时候,从 V 开始。总长度为 w * h * 1.5。

代码语言:txt
复制
Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

V U V U V U

V U V U V U

V U V U V U
  • I422(属于 YUV 422 Plannar)

I422 是 YUV 422 Planar 的一种,YUV 分量分别存放,先是 w * h 长度的 Y,后面跟 w * h * 0.5 长度的 U, 最后是 w * h * 0.5 长度的 V,总长度为 w * h * 2。

代码语言:txt
复制
Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

U U U U U U

U U U U U U

U U U U U U

V V V V V V

V V V V V V

V V V V V V
  • YV16(属于 YUV 422 Plannar)

YV16 是 YUV 422 Planar 的一种,YUV 分量分别存放,先是 w * h 长度的 Y,后面跟 w * h * 0.5 长度的 V, 最后是 w * h * 0.5 长度的 U,总长度为 w * h * 2。与 I422 不同的是,YV16 是先 V 后 U

代码语言:txt
复制
Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

V V V V V V

V V V V V V

V V V V V V

U U U U U U

U U U U U U

U U U U U U
  • NV16(属于 YUV 422 Semi-Planar)

NV16 是 YUV 422 Semi-Planar 的一种,Y 分量单独存放,UV 分量交错存放,UV 在排列的时候,从 U 开始。总长度为 w * h * 2。

代码语言:txt
复制
Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

U V U V U V

U V U V U V

U V U V U V

U V U V U V

U V U V U V

U V U V U V
  • NV61(属于 YUV 422 Semi-Planar)

NV61 是 YUV 422 Semi-Planar 的一种,Y 分量单独存放,UV 分量交错存放,UV 在排列的时候,从 V 开始。总长度为 w * h * 2。

代码语言:txt
复制
Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

V U V U V U

V U V U V U

V U V U V U

V U V U V U

V U V U V U

V U V U V U
  • YUVY(属于 YUV 422 Interleaved)

YUVY 属于 YUV 422 Interleaved 的一种。事实上,Interleaved 是属于 Packed 的,但是在 422 中,用 Interleaved 更加形象一些。在 Packed 内部,YUV 的排列顺序是 Y U V Y,两个 Y 共用一组 UV。

代码语言:txt
复制
Y U V Y   Y U V Y   Y U V Y

Y U V Y   Y U V Y   Y U V Y

Y U V Y   Y U V Y   Y U V Y

Y U V Y   Y U V Y   Y U V Y

Y U V Y   Y U V Y   Y U V Y

Y U V Y   Y U V Y   Y U V Y
  • VYUY(属于 YUV 422 Interleaved)

VYUY 属于 YUV 422 Interleaved 的一种。在 Packed 内部,YUV 的排列顺序是 VYUY,两个 Y 共用一组 UV。

代码语言:txt
复制
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 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 Y U Y   V Y U Y   V Y U Y
  • UYVY(属于 YUV 422 Interleaved)

UYVY 属于 YUV 422 Interleaved 的一种。在 Packed 内部,YUV 的排列顺序是 UYVY,两个 Y 共用一组 UV。

代码语言:txt
复制
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 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 Y   U Y V Y   U Y V Y
  • I444(属于 YUV 444 Plannar)

I444 属于 YUV 444 Plannar 的一种。YUV 分量分别存放,先是 w * h 长度的 Y,后面跟 w * h 长度的 U, 最后是 w * h 长度的 V,总长度为 w * h * 3。

代码语言:txt
复制
Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

U U U U U U

U U U U U U

U U U U U U

U U U U U U

U U U U U U

U U U U U U

V V V V V V

V V V V V V

V V V V V V

V V V V V V

V V V V V V

V V V V V V
  • YV24(属于 YUV 444 Plannar)

YV24 属于 YUV 444 Plannar 的一种。YUV 分量分别存放,先是 w * h 长度的 Y,后面跟 w * h 长度的 V, 最后是 w * h 长度的 U,总长度为 w * h * 3。与 I444 不同的是,YV24 是先排列 V。

代码语言:txt
复制
Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

V V V V V V

V V V V V V

V V V V V V

V V V V V V

V V V V V V

V V V V V V

U U U U U U

U U U U U U

U U U U U U

U U U U U U

U U U U U U

U U U U U U
  • NV24(属于 YUV 444 Semi-Planar)

NV24 是 YUV 444 Semi-Planar 的一种,Y 分量单独存放,UV 分量交错存放,UV 在排列的时候,从 U 开始。总长度为 w * h * 3。

代码语言:txt
复制
Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

U V U V U V U V U V U V 

U V U V U V U V U V U V 

U V U V U V U V U V U V 

U V U V U V U V U V U V 

U V U V U V U V U V U V 

U V U V U V U V U V U V 
  • NV42(属于 YUV 444 Semi-Planar)

NV42 是 YUV 444 Semi-Planar 的一种,Y 分量单独存放,UV 分量交错存放,UV 在排列的时候,从 V 开始。总长度为 w * h * 3。

代码语言:txt
复制
Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

Y Y Y Y Y Y

V U V U V U V U V U V U

V U V U V U V U V U V U

V U V U V U V U V U V U

V U V U V U V U V U V U

V U V U V U V U V U V U

V U V U V U V U V U V U
  • YUV 444 Packed

这个就不解释了。。。

代码语言:txt
复制
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   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   Y U V   Y U V   Y U V   Y U V

最后,加上一个音视频的QQ交流群~~~

814462428

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 分类标准
  • 具体分类
相关产品与服务
实时音视频
实时音视频(Tencent RTC)基于腾讯21年来在网络与音视频技术上的深度积累,以多人音视频通话和低延时互动直播两大场景化方案,通过腾讯云服务向开发者开放,致力于帮助开发者快速搭建低成本、低延时、高品质的音视频互动解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档