视频格式详细解析

1 简介

常用的像素的格式有两种:RGB格式YUV格式,像素的格式定义了像素在内存中的编码方式。在介绍这两种格式的信息之前,我们连接一些常用名词:
  • 像素:像素是一个图片的基本单位。单位 px 是 picture element 的缩写,所以像素有“图像元素”之意。
  • 分辨率:是指图像的大小或尺寸,比如 1920*1080(行周期数*场周期数)。
  • 位深:是指在记录数字图像颜色时,计算机实际上是用每个像素所需要的位深来表示的,比如红色、绿色、蓝色的分量用 8bit。
  • 帧率:在 1 秒钟时间里传输的图片的帧数,也可以理解为图像处理器每秒中能够刷新的次数,比如 25fps 每秒中有 25 张图片(帧率通常也称为刷新率)。
  • 码率:视频文件在单位时间内使用的数据流量,比如 1Mbps。(码率就是通常我们描述速率)
  • Stride:指在内存中每行像素的所占的空间大小,目的是为了实现内存对齐,每行像素在内存中所占的空间并不一定是图像的宽度。
频率的计算公式为:
频率 = 行周期数 * 场周期数 *帧率
速率的计算公式:
速率 = 频率 * 带宽
以常见的 1080P、30fps 的视频的时序图为例,主要由三个信号组成 H、V、DE。其有效像素的分辨率为 1920×1080,算上消隐期,其像素分辨率为 2200×1125,为 HD-SDI 格式,频率和速率的计算公式为:
频 率 = 2200 × 1125 × 30 = 74.25 M H z
速率=74.25×20=1.485Gbit/s

2 RGB 格式

RGB 格式有三个通道 R、G、B,分别对应红色绿色蓝色,由这三个分量直接决定颜色。有些图片会附加一个 Alpha 通道,用于表示透明度,即四个分量共同控制颜色(RGBA)。

一张 1920*1080 的图片,具有 2073600 个像素点,如果采用 RBG 的格式进行存储,其占用的空间大小为:
1920*1080*3/1024/1024 = 5.93MB
如果采用 RBGA 的格式进行存储,其占用的空间大小为:
1920*1080*4/1024/1024 = 7.91MB

3 YUV 格式

3.1 YUV 的编码格式

相比于RGB格式,YUV格式最大的好处是在保持图像质量降低不明显的前提下,减小文件大小。YUV的编码采用亮度和色度来指定像素的颜色,其中 Y 表示亮度,U 和 V 表示色度。对于 YUV 图像来说,并不是每个像素点都需要包含了 Y、U、V 三个分量,根据不同的采样格式,可以每个 Y 分量都对应自己的 UV 分量,也可以几个 Y 分量共用 UV 分量。

3.2 YUV 的存储格式

YUV 的存储格式可分为两种:平面格式(Plannr)紧凑模式(Packed)

  • 平面格式(Plannr):对于 planar 的 YUV 格式,先连续存储所有像素点的 Y,紧接着存储所有像素点的 U,再存储所有像素点的 V,或者是先 V 后 U。

  • 紧凑模式(Packed):对于 packed 的 YUV 格式,每个像素点的 Y,U,V 是连续交替存储的。比如 YUV420P,其中 P 表示紧凑,YUV420SP 其中的 SP 表示“半紧凑”。

其中,p 表示逐行采样,i 表示隔行采样

3.3 YUV 的采样方式

YUV 主流的采样方式有三种:YUV4:4:4YUV4:2:2YUV4:2:0

  • YUV4:4:4 格式

YUV4:4:4 这种格式占用的空间最大,每个像素都有一个 Y 分量、U 分量、V 分量。YUV4:4:4 大小RGB 存储的大小是一样的,为 3 个字节。根据 U V 的顺序不同,又有两种不同的格式。YUV4:4:4每个像素包含一个 Y 分量和一个 UV 分量。

每个像素的占用的空间:

1byte(Y) + 1byte(U) + 1byte(V) = 3 byte
单帧占用空间:
FrameSize = FrameWith * FrameWith * 3(byte)
  • 单个像素
  • 2*2 个像素

  • YUV4:2:2 格式
YUV4:2:2 是每两个 Y 分量共用一个 UV 分量,所以一个像素占用两个字节,根据存储顺序不同分为四种不同格式。
每个像素占用空间为:
1 byte(Y) + 1/2 byte(U) + 1/2 byte(V) = 2 byte
单帧占用空间:
FrameSize = FrameWith * FrameWith * 2(byte)
  • 2 个像素
  • 4*4 个像素
  • YUV4:2:0 格式
YUV4:2:0 是每四个 Y 分量共用一个 UV 分量,所以一个像素占用 1.5 个字节,根据存储顺序不同分为四种不同格式。
每个像素占用空间为:
1 byte(Y) + 1/4 byte(U) + 1/4 byte(V) = 1.5 byte
单帧占用空间:
FrameSize = FrameWith * FrameWith * 1.5(byte)
  • 四个像素

 

  • 4*4 个像素

4 RGB与YUV的转换

YUV 像素格式来源于 RGB 像素格式,通过公式运算,YUV 三分量可以还原出 RGB,YUV 转 RGB的公式如下:
  • R = Y + 1.403V
  • G = Y – 0.344U – 0.714V
  • B = Y + 1.770U
一般,将 RGB 和 YUV 的范围均限制在[0,255]间,则有如下转换公式:
  • R = Y + 1.403(V-128)
  • G = Y – 0.344(U -128)– 0.714(V-128)
  • B = Y + 1.770(U-128)
故障分析
绿屏解码失败时 Y、U、V 的参数均为零,此时:
  • R = 0+ 1.403(0-128) = -179.584
  • G = 0 – 0.344(0 -128)– 0.714(0-128) = 135.424
  • B = 0 + 1.770(0-128) = -226.56
由于 R、G、B 的范围[0,255],则 R=0,G=135.424,B=0,所以显示器呈现绿色。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注