VLC 用到的那些 YUV 格式
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 格式的更多相关文章
- YUV格式介绍
原文链接:http://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.html YUV格式有两大类:planar和packed.对于plana ...
- YUV格式分析
转自:http://www.cnblogs.com/armlinux/archive/2012/02/15/2396763.html Andrew Huang <bluedrum@163.com ...
- 关于yuv格式
首先,内存分布 1:YUV420 (1):I420: YYYYYYYY UU VV =>YUV420P (2): ...
- 【视频处理】YUV格式说明
YUV,是一种颜色编码方法,Y表示明亮度(Luminance.Luma),U和V则是色度.浓度(Chrominance.Chroma). YUV,Y`UV,YCbCr,YPbPr等都可以称为YUV,彼 ...
- YUV格式&像素
一幅彩色图像的基本要素是什么? 说白了,一幅图像包括的基本东西就是二进制数据,其容量大小实质即为二进制数据的多少.一幅1920x1080像素的YUV422的图像,大小是1920X1080X2=4147 ...
- 关于YUV格式数据
(1) YUV格式有两大类:planar和packed.对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V.对于packed的YUV格式,每个像素点 ...
- 图文详解YUV420, yuv格式2
YUV格式有两大类:planar和packed. 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V. 对于packed的YUV格式,每个像素点的Y ...
- 【转】YUV格式&像素
一幅彩色图像的基本要素是什么? 说白了,一幅图像包括的基本东西就是二进制数据,其容量大小实质即为二进制数据的多少.一幅1920x1080像素的YUV422的图像,大小是1920X1080X2=4147 ...
- YUV格式具体解释
YUV是指亮度參量和色度參量分开表示的像素格式,而这样分开的优点就是不但能够避免相互干扰,还能够减少色度的採样率而不会对图像质量影响太大.YUV是一个比較笼统地说法,针对它的详细排列方式,能够分为非常 ...
随机推荐
- note 12 集合Set
集合Set +无序不重复元素(键)集 +和字典类似,但是无"值" 创建 x = set() x = {key1,key2,...} 添加和删除 x.add('body') x.re ...
- no module named win32api
1 首先下载pywin32 https://sourceforge.net/projects/pywin32/files/pywin32/ 2进入虚拟环境 D:\env\jdscrapy\Lib\si ...
- IDEA 运行spring boot出现端口占用的问题
Description: The Tomcat connector configured to listen on port 8080 failed to start. The port may al ...
- Django字符串翻译
文章出处:https://www.jb51.net/article/70077.htm Django模板使用两种模板标签,且语法格式与Python代码有些许不同. 为了使得模板访问到标签,需要将 {% ...
- 安装部署Kafka集群
kafka是一个开源的分布式消息订阅系统(消息中间件) 安装过程 1.下载kafka_2.11-0.10.1.0.gz(ps:千万不要下错了,博主就是下到了src文件上去了,kafka中的zookee ...
- windows 服务的安装与卸载之bat脚本命令
在windows 平台下,服务的安装与卸载可通过bat 脚本命令来完成,同时可编辑服务的描述,具体代码如下: 1.服务的安装DynamicPlanService_installer.bat: @ech ...
- 第十二章 Java内存模型与线程
Java内存模型(Java Memory Model,JMM): 主内存与工作内存:Java内存模型主要是定义程序中各个变量的访问规则.Java内存模型规定了所有的变量都存储在主内存(Main Mem ...
- PyQt5实现邮件合并功能(GUI)
1. 实战Word批量 需要处理批量替换word的一些数据,数据源从Excel中来. Excel的百分数会变为数字,以及浮点数会多好多精度,为了原汁原味的数据,直接复制数据到文本文件.通过\t来分隔即 ...
- windows开发各种dll缺失
推荐使用 depend这个工具,非常好用 http://www.dependencywalker.com/ 打开对应的文件,就能看到缺失了哪些dll 感谢博主: https://blog.csdn.n ...
- pgadmin连接 postgresql远程设置
背景:通过yum默认方式将pgsql10安装在centos7, pgsql 的配置文件在:/var/lib/pgsql/10/data. 配置文件:postgresql.conf 和 pg_hba.c ...