YUV是视频应用中使用的一类像素格式。YUV实际上是所有“YUV”像素格式共有的颜色空间的名称。 与RGB格式(红 - 绿 - 蓝)相对应,YUV颜色用一个称为Y(相当于灰度)的“亮度”分量和两个“色度”分量表示,分别称为U(蓝色投影)和V(红色投影) , YUV由此得名。YUV也可以称为YCbCr,虽然这些术语的含义略有不同,但它们往往会混着并互换使用。本文介绍了VLC媒体播放器环境中最有用的YUV像素格式。 除非另有说明,否则每个成员的用一个八位字节(8位)存储。

平面格式

平面(或有时“三平面”)格式对3种颜色分量中的每一种使用单独的矩阵。 换句话说,存在一个亮度像素值表和用于色度分量的两个单独的表。 这在像素的存储器中的分离表示对于视频编码更方便。

一、平面格式

平面(或有时称“三平面”)格式对3种颜色分量中的每一种使用单独的矩阵。 换句话说,存在一个亮度像素值表和用于色度分量的两个单独的表。 在存储器中将像素分离表示,这对于视频编码更方便。

1. YUV 4:2:0 (I420/J420/YV12)

(1). I420

首先它有一个“亮度”平面Y,然后是U色度平面,最后是V色度平面。

两个色度平面(蓝色和红色投影)在水平和垂直维度以2为倍数进行下采样。也就是说,对于2x2像素块,有4个Y样本,而只有1个U样本和 1 V样本。

对于4个像素,此格式需要4 * 8 + 8 + 8 = 48位,因此其位深度是12。

目前,I420是VLC中最常见的格式。 大多数视频解码器也以I420格式输出原始图像。

以下符号说明:每个字母(Y/U/V)代表一位。

  • 对于一个 I420 像素存储的位格式: YYYYYYYY UU VV
  • 对于50个像素的 I420 帧: YYYYYYYY*50 UU*50 VV*50 (or Y*8*50 U*2*50 V*2*50 for short)
  • 对于n个像素的 I420 帧: Y*8*n U*2*n V*2*n

(2). J420

J420可以说和I420完全相同,但具有全范围(“数字”,0-255)亮度(Y)分量而不是有限范围(“模拟”,16-240)。 色度平面与I420完全相同。

(3). YV12

YV12和I420也几乎完全相同,但U和V平面的顺序是相反的。 从名字来看,“YV”表示平面顺序:先存放Y,然后是V(最后是U)。 “12”指的是像素位深度:每像素12位,与I420相同。

2. YUV 4:2:2 (I422/J422)

(1). I422

与I420一样,I422有一个亮度平面Y和2个色度平面U,V。

不过,在I422中,色度平面(蓝色和红色投影)仅在水平维度上进行下采样,仍然是2倍。因此,在色度平面中存在与亮度平面中相同的行数。

对于2x2像素块,每个有4个Y样本和2个U和2个V样本。 深度为4 * 8 + 2 * 8 + 2 * 8 =每4像素64位,因此每像素16位,位深度是16。

一些视频编解码器支持I422(可选)以获得更高质量的视频编码。

(2). J422

J422与I422几乎完全相同,但具有全范围(“数字”,0-255)亮度(Y)分量而不是有限范围(“模拟”,16-240)。 色度平面与I422完全相同。

3. YUV 4:4:4

(1). I444

类似I420和I422,I444具有一个亮度平面Y和2个色度平面U和V。但色度平面未被下采样:每个像素有3个八位字节值。 因此深度为每像素24位(与RGB24或RGB32一样)。

一些视频编解码器支持I444。

二、 打包格式

在打包格式中,通常只有一个平面,所有亮度和色度数据都是交错的。 这类似于RGB像素格式,仅使用的是不同色彩空间。打包格式在网络摄像头中非常流行。 在硬件中,使用单独的平面是低效的:每个像素需要几次存储器访问。 打包格式更容易,因此使用起来更简单。另一方面,打包格式通常不能处理垂直下采样。 否则扫描线将具有不同的尺寸。 因此,通常,打包格式使用水平方向下采样,步长因子为2(即YUV 4:2:2)。

1. UYVY

也叫Y422或UYNV。

在UYVY中,色度样本被下采样2倍。

若使用UYVY,在连续的2个像素中,由U开始,然后是第一个像素的亮度,然后是V,然后是第二个像素的亮度。UUUUUUUU YYYYYYYY VVVVVVVV YYYYYYYY

2. YUY2

也叫YUYV,V422或YUNV。

在YUY2中,色度样本被下采样2倍。

若使用YUY2,在连续的2个像素中,从第一个像素的亮度开始,然后是U,然后是第二个像素的另一个亮度,然后再次是V.

YUY2和UYVY之间的转换是通过成对交换字节来实现的。

3. YVYU

YVYU和YUY2类似,但U和V顺序是颠倒的。

4. VYUV

待定

三、半平面格式

半平面格式,有两个平面而不是三个平面,一个平面用于亮度,一个平面用于两个色度分量。 它们有时也被称为双平面格式。

(1).NV12

与I420相似,NV12具有一个“亮度”平面Y和一个交错存着U和V的平面。

在NV12中,色度平面(蓝色和红色)在水平和垂直维度中被下采样2倍。

对于2x2像素块,有4个Y样本、1个U和1个样本。

这是NV12的图形表示。 每个字母代表一位:

  • 对于一个 NV12 像素: YYYYYYYY UVUV
  • 2个 NV12 像素: YYYYYYYYYYYYYYYY UVUVUVUV
  • 50个 NV12 像素: Y*8*50 (UV)*2*50
  • n个 NV12 像素: Y*8*n (UV)*2*n

原文地址:https://wiki.videolan.org/YUV/

VLC 用到的那些 YUV 格式的更多相关文章

  1. YUV格式介绍

    原文链接:http://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.html YUV格式有两大类:planar和packed.对于plana ...

  2. YUV格式分析

    转自:http://www.cnblogs.com/armlinux/archive/2012/02/15/2396763.html Andrew Huang <bluedrum@163.com ...

  3. 关于yuv格式

    首先,内存分布        1:YUV420          (1):I420:              YYYYYYYY UU VV    =>YUV420P          (2): ...

  4. 【视频处理】YUV格式说明

    YUV,是一种颜色编码方法,Y表示明亮度(Luminance.Luma),U和V则是色度.浓度(Chrominance.Chroma). YUV,Y`UV,YCbCr,YPbPr等都可以称为YUV,彼 ...

  5. YUV格式&像素

    一幅彩色图像的基本要素是什么? 说白了,一幅图像包括的基本东西就是二进制数据,其容量大小实质即为二进制数据的多少.一幅1920x1080像素的YUV422的图像,大小是1920X1080X2=4147 ...

  6. 关于YUV格式数据

    (1) YUV格式有两大类:planar和packed.对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V.对于packed的YUV格式,每个像素点 ...

  7. 图文详解YUV420, yuv格式2

    YUV格式有两大类:planar和packed. 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V. 对于packed的YUV格式,每个像素点的Y ...

  8. 【转】YUV格式&像素

    一幅彩色图像的基本要素是什么? 说白了,一幅图像包括的基本东西就是二进制数据,其容量大小实质即为二进制数据的多少.一幅1920x1080像素的YUV422的图像,大小是1920X1080X2=4147 ...

  9. YUV格式具体解释

    YUV是指亮度參量和色度參量分开表示的像素格式,而这样分开的优点就是不但能够避免相互干扰,还能够减少色度的採样率而不会对图像质量影响太大.YUV是一个比較笼统地说法,针对它的详细排列方式,能够分为非常 ...

随机推荐

  1. C++调用JS函数

    1 调用方法 https://blog.csdn.net/donglinshengan/article/details/29828103 https://blog.csdn.net/sunmz_wjx ...

  2. Filter简易实现.

    一 代码结构: 二 代码 Test.java: package com.demo.test; import com.demo.filter.ApplicationFilterChain; import ...

  3. mysql-5.7.20

    . 下载mysql- wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.20-linux-glibc2.12-i686.tar. ...

  4. Oracle创建用户、授权、规则

    ---用户登录命令--管理员登录conn sys/oracle as sysdba;--创建用户方案必须是管理员权限--创建用户命令 create user useranme identifild b ...

  5. mpvue

    使用mpvue开发小程序 首先安装 我们使用@vue/cli 无法使用vue init 可以全局安装一个@vue/cli-init npm install -g @vue/cli-init 然后初始化 ...

  6. 71.纯 CSS 创作一个跳 8 字型舞的 loader

    原文地址:https://segmentfault.com/a/1190000015534639#articleHeader0 感想:rotateX() 和rotateZ()一起使用好懵呀. HTML ...

  7. Java序列化相关

    java类实现serializable有什么好处或意义 一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才是可序列化的.因此如果要序列化某些类的对象,这些类就必须实现Ser ...

  8. Spring整合quart初识

    Spring集成quart有两种方式,一种是实现Job接口,一种是继承QuartzJobBean 刚开始报错:持久化时未序列化异常 <bean id="simpleJobDetail& ...

  9. python学习笔记----random

    import random import string # 随机整数: print random.randint(1,50) >>> print(random.randint(1,5 ...

  10. Python module ---- re

    Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,在文本解析.复杂字符串分析和信息提取时是一个非常有用的工具.python的re模块,在绝大 ...