[多媒体] YUV相关知识

参考:

Recommended 8-Bit YUV Formats for Video Rendering - Win32 apps | Microsoft Docs

刻意练习FFmpeg系列:颜色和像素 - 知乎


分类:

YUV 分为 :YUV444 , YUV422 和 YUV420三种


YUVabc 是什么意思:

YUV 是模拟数据称呼,对应的数字数据应该是 YCrCb,他们都表示同一个东西,后面的数字abc 表示 “在一个 2*2 的矩阵 中有a个Y,b个U,c个V ” 。

注意:

YUVabc是代表一种定义,并不代表具体的格式。单YUV420就有很多种具体的格式,比如 IMC1 , IMC2 等等。甚至我们可以定义自己的格式,只要他能满足定义即可。


多少位深度是什么意思:

像素的 “位深” 是指表示一个像素需要多少位的数据量,比如 32位深是说表示一个像素需要32位(4个字节)数据。

如果 Y U V分量都用 8bit 表示,即每个分量的只能取值 0~255 ,则 YUVA每个像素是 4*8 = 32bit

YUV422 每个像素是 2*8 = 16bit 。

如果 Y U V分量都用 16bit 表示,即每个分量的取值范围是 0~65535,则 YUVA每个像素是 4*16 = 64bit ,YUV422 每个像素是 2*16 = 32bit 。

下文如果不做特别说明,则认为每个分量是 8bit 。


YUV444:

YUV 444 一般都是 32 bit 深度的,为什么不是 3*8 = 24 bit 呢?那是因为YUV444 实际上还包含一个Alpha字节用来表示透明度,YUV444 在进行数据存储时是 YUVA ,所以是 4*8 = 32 bit 。

YUV444 存储空间上和 RGBA(一般叫做RGB) 是一样的,因此不存在压缩。

ps:在 ffmpeg 中有 YUV444P 格式,这种格式就没有 Alpha 通道,因此位深是 3*8 = 24 bit


YUV422:

YUV 422 一般是 16 bit 深度的,因此每一个像素由两个元素组成,要么是 YV 要么是 YU,同时也不存在 Alpha 字节,因此没法表示透明度。

YUV 422 要求一个 2*2 的矩阵里,必须出现 4 个 Y,2个U,2个V 。

YUV 422 可以根据 U 和 V 在 2*2 矩阵中的具体位置又可以分为   YUY2 和 UYUV 。

YUV422 —— YUY2:

数据存储格式为:

可以看到每个像素都是 YU 或者 YV ,如果Y、U、V都用 8bit 表示的话,则每个像素的数据量为16bit 。

YUV422 —— UYVY:

数据存储格式为:

和 YUY2相比,唯一的区别在于表示一个像素的数据字节序不同,比如第一个像素,在YUY2中Y分量处于低地址,U分量处于高地址,在UYVY中则刚好相反。

正因为需要多个字节来表示一个像素,因此便引入了字节序的问题。


YUV420:

YUV 420 是指  “在一个 2*2矩阵中,必须有4个Y ,1个U和1个V” 。

这种格式的数据有特殊性,每个像素可能是 16bit 深 ,也可能是 8 bit 深。那么这个时候数据在内存中的存储格式就不那么规整了。所以大部分的 YUV420 的存储格式都是先集中存放Y,然后集中存放U,在集中存放V 。

同时,所有的 YUV420 格式都采用 平均值 来代表位深 。

YUV420 —— IMC1:

内存格式:

由于添加了 Padding 来填补空白,所以位深为  (16+16+16+16) / 4 = 16 bit 

YUV420 —— IMC3:

内存格式:

和 IMC1 的区别在于 先存 U 后存V ,空白数据用空格填充,位深也是 16 bit

YUV420 —— IMC2:

内存格式:

由于没有采用任何 Padding 来保持内存规整,所以平均位深 =  (16 + 8 + 16 + 8) / 4 = 12 bit

YUV420 —— IMC4:

内存格式:

位深度同样是 12 bit ,和 IMC2 的区别就是先存储 U。

YUV420 —— YV12:

内存格式:

 位深度是 12 bit ,先集中存储V 再集中存储 U。

YUV420 —— NV12:

内存格式:

 位深度是 12 bit ,UV 交替存储。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值