音视频基本概念

一、视频基本概念

1.1视频的主要概念

视频码率: kb/s,是指视频文件在单位时间内使用的数据流量,也叫码流率。码流率越大,说明单位时间内取样率越大,数据流精度就越高。 **视频帧率:**fps,通常说一个视频的 25 帧,指的就是这个视频帧率,即 1秒中会显示 25 帧。帧率越高,给人的视觉就越流畅。

  • 24/25 fps :1秒 24/25 桢,一般的电影频率;

  • 30/60 fps :1秒 30/60 桢,游戏的帧率,30桢可以接收,60桢会感觉更加流畅逼真。85 fps 以上人眼基本无法察觉出来了,所以更高的帧率在视频里没有太大的意义。

视频分辨率: 分辨率就是我们常说的 640480 分辨率、19201080 分辨率,分辨率影响视频图像的大小。 容器/文件(Container/File): 即特点格式的多媒体文件,比如 mp4、flv、mkv 等。 媒流体(Stream): 表示时间轴上的一段连续数据,如一段声音数据、一段视频数据或一段字母数据,可以使压缩的,也可以是非压缩的,压缩的数据需要关联特定的编解码器。 数据帧/数据包(Frame/packet): 通常,一个媒体流是由大量的数据帧组成的,对于压缩数据,帧对应着编解码器的最小处理单元,分属于不同媒体流的数据帧交错存储于容器之中。一般情况下:Frame 对于压缩前的数据,Packet 对应压缩后的数据。 编解码器(Codec): 以帧为单位实现压缩数据和原始数据之间的相互转换的。 复用(mux): 把不同的流按照某种容器的规则放入容器中,这种行为叫做复用(mux)。 **解复用(demux):**把不同的流从某种容器中解析出来,这种行为叫做解复用。

1.2帧

桢,是视频的一个基本概念,表示一张画面,如翻页动画书中的一页,就是一帧。一个视频就是由许多的桢组成的 ,帧有三种类型:I 帧、P 帧、B 帧, 它们共同构成视频 GOP(Group of Pictures)结构,影响视频的质量和压缩效率 ;

GOP(Group of Pictures)指一组连续的视频帧,通常由一个I帧开头,包含若干P帧和B帧,直到下一个I帧开始新的GOP 。其结构如IPBPBP或IBBPBB等,影响视频压缩效率、延迟和容错能力。GOP较大会提高压缩率但增加延迟,较小小利于实时传输但占用更多带宽

  1. I帧(Intra-coded frame)

    • 关键帧,包含完整的图像信息。

    • 不依赖其他帧进行解码,可以独立解码和显示。

    • 压缩率最低,数据量最大。

    • 通常作为视频的起点或场景切换时使用。

  2. P帧(Predictive-coded frame)

    • 前向预测帧,只存储与前面最近的一个I帧或P帧之间的差异信息。

    • 解码时需要参考前面的I/P帧。

    • 压缩率较高,数据量小于I帧。

  3. B帧(Bidirectionally-predictive-coded frame)

    • 双向预测帧,存储的是与前后两个帧的差异信息。

    • 解码时需要参考前面和后面的I/P帧。

    • 压缩率最高,数据量最小。

    • 但处理复杂度也最高。

简单总结:

  • I帧 = 独立图像(完整数据)

  • P帧 = 参考前面的帧(部分数据 + 差异)

  • B帧 = 参考前后的帧(最少数据 + 双向差异)

1.3色彩

1.3.1 RGB

RGB:RGB 的颜色模式应该是我们最熟悉的一种,在现在的电子设备中应用广泛。通过 RGB 三种基础色,可以混合出所有的颜色;

RGB 格式目前主要有两类:

  1. 像素格式,这是我们比较常用的格式,R,G,B 分别分开,用N个位来表示。例如 RGB24格式 中 R 占 8位,G 占 8位,B 占8 位,所以一个像素占 24位。这种格式可以混合生成 256 * 256 * 256 = 16,777,216 种颜色,但缺点是占用空间大。

  2. 索引格式,RGB 的值是一个索引,不是真正的颜色值,例如 RGB 的值 占 1位,那只有两个值 0 跟 1,通常用于黑白颜色,这种情况下 一个像素只占 1位,大大节省了空间。0 跟 1 到底是什么颜色,是通过 索引表(也叫调色板)来定位的,不一定是 黑白,也可以是其他的颜色。所以叫索引格式。

    只占 1 位的 RGB 成为 RGB1 ,还有 RGB4 占 4 位,索引表有 16 种颜色, RGB8 占 8 位,索引表有 256 种颜色。

不需要 索引表/调色板 的 RGB 模式 称为 真彩色

1.3.1 YUV

视觉心理学研究表明,人的视觉系统对光的感知程度可以用两个属性来描述:亮度(luminance)色度(chrominance)色度感知 包含两个维度:色调 (Hue)和 色饱和度 (saturation)。色调是由光波的峰值定义的,描述的是光的颜色。色饱和度是由光波的谱宽定义的,描述的是光的纯度。因此色彩的感知主要有 3个属性:亮度(luminance),色调(Hue)色饱和度 (saturation)。也就是 YUV 色彩空间,Y 代表 亮度,U代表色调,V代表色饱和度。大量研究实验表明,视觉系统 对 色度 的敏感度 是远小于 亮度的。所以可以对 色度 采用更小的采样率来压缩数据,对亮度采用正常的采样率即可,这样压缩数据不会对视觉体验产生太大的影响。简单来说就是用更少的数据/信息来表达 色度(chroma),用更多的数据/信息来表达 亮度(luminance)。

YUV 也叫 YCbCr

Cb=Blue−Y Cb 代表 蓝色 色度的分量,是通过 RGB 里面的 B 的值 减去 Y 的值得到的

Cr=Red−Y Cr 代表 红色 色度的分量,是通过 RGB 里面的 R 的值 减去 Y 的值得到的

Cg=Green−Y Cg 代表 绿色色 色度的分量,是通过 RGB 里面的 G 的值 减去 Y 的值得到的。

Y:亮度(Luminance 或 Luma),也称灰度值。除了表示亮度信号外,还含有较多的绿色通道量; U:蓝色通道与亮度的差值; V:红色通道与亮度的差值(U 和 V 表示的则是色度)。

优势和用途: 人眼对亮度敏感,对色度不敏感,因此可以减少 UV 的数据量,人眼无法感知出来,这样可以通过压缩 UV 的分辨率,在不影响观感的前提下,减小视频的体积,主要用于视频信号的压缩、传输和存储RGB 色彩空间更适合图像采集和显示, YUV 空间用于编码和存储则比较好。在存储和编码之前,RGB 图像要转换为 YUV 图像,而 YUV 图像在 显示之前通常有必要转换回 RGB。

1.3.2 YUV与RGB换算

RGB 到 YUV

复制代码
Y = 0.299 * R + 0.587 * G + 0.114 * B
U = -0.1687 * R - 0.3313 * G + 0.5 * B + 128
V = 0.5 * R - 0.4187 * G - 0.0813 * B + 128

YUV 到 RGB

复制代码
R = Y + 1.402 * (V - 128)
G = Y - 0.34414 * (U - 128) - 0.71414 * (V - 128)
B = Y + 1.772 * (U - 128)
1.3.3 YUV存储格式

YUV 格式有3大类 :

**1,planner :**平面格式, 先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。

注意:这里的连续存储,不是一行像素里面连续存储,是整张图片的连续存储,例如 本文的 juren_yuv_444.yuv 图片是 6075kb 大小,那第 1~ 2025kb 都是 Y 的数据, 2026 ~ 4050kb 都是 像素点的 U 数据,以此类推。

2,semi-Planar:半平面的YUV格式,Y分量单独存储,但是UV分量交叉存储。

3,packed :每个像素点的Y,U,V是连续交错存储的。