• YUV格式介绍


    最近在做视频采集方面的程序,使用vlc对采集到的视频进行播放,但是视频的颜色格式貌似有问题导致无法播放,以下为VLC WIKI关于YUV格式的翻译,

    原文地址:https://www.cnblogs.com/ichenwin/articles/10316627.html

    wiki原文地址:https://wiki.videolan.org/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
  • 相关阅读:
    linux --- 3 vim 网络 用户 权限 软连接 压缩 定时任务 yum源
    linux --- 2.常用命令 , python3, django安装
    linux --- 1.初始linux
    admin ---11.admin , 展示列表 和 分页
    并发 ---- 6. IO 多路复用
    django基础 -- 10.form , ModelForm ,modelformset
    django基础 -- 9.中间件
    flask基础
    MySQL-数据库增删改查
    面试题目二
  • 原文地址:https://www.cnblogs.com/gisvito/p/12807391.html
Copyright © 2020-2023  润新知