视频开发

音视频基础概念

2019-05-15  本文已影响18人  Seacen_Liu

音视频之所以叫音视频是因为他由音频和视频构成,我们平时看的视频其实就是音视频。本文将记录笔者在学习音视频遇到的概念,如果你和笔者一样对音视频并没有接触太多,那么下面的笔记将会帮你认识音视频。

音频

声波

人耳

数字音频

为了将音频信号数字化,需要进行采样量化编码三个步骤。

描述概念

音质 量化格式(位深) 采样率 声道数 比特率 存储空间(1分钟)
CD 音质 16比特(2 字节) 44100Hz 2 1378.125kbps 10.09MB

音频编码

PCM 即音频裸数据量大,存在本地稍微可以接受,但是要在网络中实时在线传播的话就太大了,因此就有了音频压缩编码的存在。压缩编码实际上就是压缩冗余信号,冗余信号指的是人耳听不到的音频信号(20Hz ~ 20kHz范围以外)。

常见概念

PCM 编码

PCM(Pulse Code Modulation,脉冲编码调制)是无损编码,也是音频裸数据,能够达到最大程度的高保真。
优点:音源信息保存完整,音质好
缺点:信息量大,体积大,冗余度过大
适用场合:广泛用于素材保存及音乐欣赏

WAV 编码

WAV(Waveform Audio File Format)是一种不会进行压缩操作的编码,他在 PCM 数据格式的前面加上了44字节,分别用来描述 PCM 的采样率、声道数、数据格式等信息。
优点:音质非常好,大量软件都支持
缺点:信息量大,体积大,冗余度过大
适用场合:多媒体开发的中间文件、保存音乐和音效素材

MP3 编码

MP3 具有不错的压缩比,使用 LAME 编码的中高码率的 MP3 文件,听感上非常接近 WAV 文件。
优点:音质在 128 Kbps 以上表现还不错,压缩比比较高,兼容性高
缺点:在 128 Kbps 及以下时,会出现明显的高频丢失
适用场合:高比特率下对兼容性有要求的音乐欣赏

AAC 编码

AAC 是新一代的音频有损压缩技术,它通过一些附加的编码技术(比如PS、SBR等),衍生出了 LC-AAC、HE-AAC、HE-AAC v2 三种主要的编码格式:

优点:在小于 128 Kbps 的码率下表现优异,支持多种音频声道组合,提供优质的音质
适用场合:128 Kbps 以下的音频编码,多用于视频中的音频轨的编码

SBR:一种音频编码增强算法,可在中低码率下增加音频的带宽或改善编码效率,但是在高码率中没什么作用。

Ogg 编码

Ogg 在各种码率下大豆油比较优秀的表现,尤其在中低码率场景下。可以用更小的码率达到更好的音质,128 Kbps 的 Ogg 比 192 Kbps 甚至更高码率的 MP3 还要出色。但是它的兼容性不是很好,因此和 MP3 无法相提并论。
优点:可用比 MP3 个更小的码率实现比 MP3 更好的音质,高低中码率下均有良好的表现
缺点:软件硬件的兼容性不好
使用场合:语音聊天的音频消息场景

图像

一幅幅图像是由一个个像素点组成的,每个像素点都由3个子像素点组成。

分辨率

像素点的数量就是分辨率,比如一个屏幕的分辨率是1280 x 720,那么说明水平方向有 720 个像素点,垂直方向有 1280 个像素点,因此整个屏幕就有1280 x 720个像素点(注:这是不算子像素点的说法)。

位图(Bitmap)

位图的像素都分配有特定的位置和颜色值。每个像素的颜色信息由 RGB 组合或者灰度值表示。根据位深度,可将位图分为1、4、8、16、24及32位图像等。每个像素使用的信息位数越多,可用的颜色就越多,颜色表现就越逼真,相应的数据量越大。

位深度:表示一个位图所使用的二进制数目,即32 位图像能表示 2^8 种颜色的彩色图,1 位图像就能表示 2 种颜色的黑白图。

RGB 表示方式

一个图像可以由 RGB 组成,这些子像素点的常用表示方式如下:

那么一张1280 x 720RGBA_8888图像的大小就是:
1280 * 720 * 4 = 3.156 MB

YUV 表示方式

YUV 主要应用于优化彩色视频信号的传输,使其向后兼容老实黑白电视。与 RGB 视频型号传输相比,最大的优点是占用极少的频宽

表示方式:YUV 的每个分量都使用一个字节(8位)来表示,所以取值范围是 0 ~ 255。
存储格式

采样范式:YUV 图像的主流采样方式有如下三种:

YUV 4:4:4 采样

YUV 4:4:4 采样,意味着 Y、U、V 三个分量的采样比例相同,因此在生成的图像里,每个像素的三个分量信息完整,都是 8 bits,也就是一个字节。
如下图所示(Y 分量用叉表示,UV 分量用圆圈表示):


YUV444

例子:
图像像素:[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
采样的码流:Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
映射出的像素点: [Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]

这种采样方式的图像和 RGB 颜色模型的图像大小是一样,并没有达到节省带宽的目的,当将 RGB 图像转换为 YUV 图像时,也是先转换为 YUV 4:4:4 采样的图像。

YUV 4:2:2 采样

YUV 4:2:2 采样,意味着 UV 分量是 Y 分量采样的一半,Y 分量和 UV 分量按照 2 : 1 的比例采样。每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一个采集一个。如下图所示(Y 分量用叉表示,UV 分量用圆圈表示):


YUV422

例子:
图像像素:[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
采样的码流:Y0 U0 Y1 V1 Y2 U2 Y3 V3
映射出的像素点: [Y0 U0 V1]、[Y1 U0 V1]、[Y2 U2 V3]、[Y3 U2 V3]

两个图像共用一个 U、V 分量,因此YUV 4:2:2 采样的图像比 RGB 模型图像节省了三分之一的存储空间,在传输时占用的带宽也会随之减少。

YUV 4:2:0 采样

YUV 4:2:0 采样,并不是指只采样 U 分量而不采样 V 分量。而是指,在每一行扫描时,只扫描一种色度分量(U 或者 V),和 Y 分量按照 2:1 的方式采样。每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一行按照 2 : 1 进行采样。对于每个色度分量来说,它的水平方向和竖直方向的采样和 Y 分量相比都是 2:1 。如下图所示(Y 分量用叉表示,UV 分量用圆圈表示):


YUV420

图像像素:
[Y0 U0 V0]、[Y1 U1 V1]、 [Y2 U2 V2]、 [Y3 U3 V3]
[Y5 U5 V5]、[Y6 U6 V6]、 [Y7 U7 V7] 、[Y8 U8 V8]
采样的码流:Y0 U0 Y1 Y2 U2 Y3 Y5 V5 Y6 Y7 V7 Y8
映射出的像素点:
[Y0 U0 V5]、[Y1 U0 V5]、[Y2 U2 V7]、[Y3 U2 V7]
[Y5 U0 V5]、[Y6 U0 V6]、[Y7 U2 V7]、[Y8 U2 V8]

四个图像共用一个 U、V 分量,因此YUV 4:2:0 采样的图像比 RGB 模型图像节省了一半的存储空间,因此它也是比较主流的采样方式。

RGB 和 YUV 的转化

RGB 到 YUV 的转换,就是将图像所有像素点的 R、G、B 分量转换到 Y、U、V 分量。对于显示器来说,它是通过 RGB 模型来显示图像的,而在传输图像数据时又是使用 YUV 模型(可节省带宽),因此就有:

标清电视使用标准 BT.601:

$$ \begin{bmatrix}Y \\U \\V\end{bmatrix} = \begin{bmatrix} 0.299 & 0.587 & 0.114 \\ -0.14713 & -0.28886 & 0.436 \\ 0.615 & -0.51499 & -0.10001 \end{bmatrix} \begin{bmatrix}R \\G \\B\end{bmatrix} $$ $$ \begin{bmatrix}R \\G \\B\end{bmatrix} = \begin{bmatrix} 1 & 0 & 1.13983 \\ 1 & -0.39465 & -0.58060 \\ 1 & 2.03211 & 0 \end{bmatrix} \begin{bmatrix}Y \\U \\V\end{bmatrix} $$

高清电视使用标准 BT.709:

$$ \begin{bmatrix}Y \\U \\V\end{bmatrix} = \begin{bmatrix} 0.2126 & 0.7152 & 0.0722 \\ -0.09991& -0.33609 & 0.436 \\ 0.615 & -0.55861 & -0.05639 \end{bmatrix} \begin{bmatrix}R \\G \\B\end{bmatrix} $$ $$ \begin{bmatrix}R \\G \\B\end{bmatrix} = \begin{bmatrix} 1 & 0 & 1.28033 \\ 1 & -0.21482 & -0.38059 \\ 1 & 2.12798 & 0 \end{bmatrix} \begin{bmatrix}Y \\U \\V\end{bmatrix} $$

图片压缩格式

视频

视频中的每帧都代表着一幅静止的图像

视频编码

相较于音频数据,视屏数据有极强的相关性,也就是说有大量的冗余信息,包括空间上的冗余信息和时间上的冗余信息。

帧间编码技术 -> 去除时间上的冗余信息

帧内编码技术 -> 去除空间上的冗余信息

MPEG

MPEG 算法是适用于动态视频的压缩算法,它除了对单幅图像进行编码外,还利用图像序列中的相关原则去除冗余,大大提高了视频的压缩比。

版本:Mpeg1(⽤于 VCD)、Mpeg2(⽤于 DVD)、Mpeg4 AVC(流媒体使⽤最多)

H.264

ITU-T 制定的 H.261、H.262、H.263、H.264⼀系列视频编码标准是⼀套单独的体系。其中,H.264 集中了以往标准的所有优点,并吸取了以往标准的经验,采⽤的是简洁设计,这使得它⽐ Mpeg4 更容易推⼴。现在使⽤最多的就是 H.264 标准,H.264 创造了多参考帧多块类型整数变换帧内预测等新的压缩技术,使⽤了更精细的分像素运动⽮量(1/4、1/8)和新⼀代的环路滤波器,这使得压缩性能得到⼤⼤提⾼,系统也变得更加完善。

编码概念

IPB 帧

IDR帧:(instantaneous decoding refresh picture)是一个特殊的I帧,这一帧之后的所有参考帧都只会参考到这个IDR帧,而不会再参考前面的帧。

GOP

GOP(Group Of Picture),表示一组图片,两个I帧之间就形成的一组图片。通常在为编码器设置参数的时候,必须要设置gop_size的值,其代表的是两个I帧之间的帧数目。

PS:提高视频质量技巧:

  • gop_size越大,整个画面的质量就会越好
  • 多使用B帧(I的压缩率是7,P是20,B可以达到50)可节省更多的空间保存I帧。这样就能在相同的码率下提供更好的画质。

PTS 与 DTS

GOP&PTS&DTS

PS:在没有B帧的情况下,DTS 和 PTS 的输出顺序是一样的。因为B帧打乱了解码和显示的顺序,所以一旦存在B帧,PTS与DTS势必就会不同。因此需要 DTS 和 PTS 两种不同的时间戳。

参考与更多

《音视频开发进阶指南》
一文读懂 YUV 的采样与格式
移动端图片格式调研

上一篇 下一篇

猜你喜欢

热点阅读