音视频基础
1.模拟信号的数字化方法PCM
1.1 PCM的定义
最基本的概念:模拟信号是指随时间连续变化的物理量,将声音在磁带上记录成磁场强度的变化或在黑胶唱片上记录成沟槽大小的变化就是以模拟方式进行存储。数字信号则是离散的,计算机中的数据都是以数字方式存储的。模拟信号和数字信号可以相互转换,这里我们讨论的就是把模拟信号转换成数字信号。
脉冲编码调制(Pulse Code Modulation, PCM)是一种模拟信号的数字化方法。它是最常用、最简单的波形编码方式,但是也存在其它方法,比如脉冲密度调制(Pulse Density Modulation, PDM)。
1.2 PCM的实现过程
下图就是脉冲编码调制的完整过程,简单概括为:采样,量化,编码。

具体来说就是:
1,将模拟信号按照同样的时间间距(即采样时间)进行采样。
2,按某种运算法确定样本值,即量化。
3,将样本值用二进制表示,即编码。
由上可见,脉冲编码调制实际上并没有”调制”的过程,而且也并没有脉冲出现,只因为PCM来源于PWM和PPM技术,所以也保留了”脉冲”二字。所以将脉冲编码调制(PCM)理解为”一种模拟信号的数字化方法”是最准确的。
2 数字音频基础概念
2.1 采样率 Sample Rate
采样率(采样频率)即每秒内进行采样的次数。符号是fs,单位是Hz。采样率越高,数字波形的形状就越接近原始模拟波形,声音的还原就越真实。
如下是同一波形的两种采样率对比,可以看到低采样率的A采样波形严重失真,而高采样率的B则几乎完全重现原始波形:

根据奈奎斯特-香农采样定理,只有采样频率高于原始模拟信号中最高频率的两倍时,才能把数字信号表示的模拟信号准确还原回去。例如,CD 的采样率为每秒 44,100 个采样,因此可重现最高为 22,050 Hz 的频率,此频率刚好超过人类的听力极限 20,000 Hz。实际应用中采样频率一般为信号最高频率的2.56~4倍。
数字音频领域常用的采样率如下表:

2.2 采样位数 Bit Depth
采样位数(又称位宽,位深,位深度),字面意义就是采样值的二进制编码的位数。采样位数反应了采样系统对声音的辨析度,位数越高,对声音的记录就越精细,所以也称之为采样精度,采样深度。
采样位数的含义是用多少个点来描述声音信号的强度,如1.2节的PCM编码的位数就是3bit,即有2^3 = 8个点。如果是8bit,就有2^8 = 256个点。
采样位数直接影响采集信号的信噪比/动态范围。较高的采样位数可提供更多可能的振幅值,产生更大的动态范围、更低的噪声基准和更高的保真度。

总结一下,采样率是相对于时间来说的,采样位数是相对信号的幅度来说的,在1.2节中分别对应横坐标和纵坐标。
2.3 声道 Sound Channel
声道是指声音在录制或播放时在不同空间位置采集或回放的相互独立的音频信号,通俗的说声道数就是录音时的麦克风数量,也是播放时的音响数量。声道数,也叫通道数,轨道数,音轨数。
常见的声道数有单声道(Mono),双声道(即立体声,Stereo),5.1声道,7.1声道等。这里的 .1声道指的是低音声道。
如下是一个5.1声道家庭影院示意图,六个扬声器分别是 :C(Central)中置,FL(Front Left)左前置,FR(Front Right)右前置,SL(Surround Left)左环绕,SR(Surround Right)右环绕和SW(Subwoofer)低音炮。

2.4 比特率 Bit Rate
比特是由bit音译而来,指二进制数中的位,它是数字信息的最小度量单位。
在通信与计算领域,比特率就是指每秒传送或处理的比特的数量(位数),所以比特率又称为”二进制位速率“,简称”位速或位率“,常用于形容传输速度,带宽。
在数字多媒体领域,比特率是每秒播放连续的音频或视频的比特的数量,是音视频文件的一个属性。此时它相当于术语”数字带宽消耗量或吞吐量“,也俗称为”码率“。
比特率的统一含义是”**二进制码数量/时间”**,单位是比特每秒,bit per second,缩写为bit/s(不是”bits/s”),简写为bps或b/s。有一些不正式的描述比如”128千比特音频流”或”100兆比特网络”则是省略了”每秒”。
常用比特率的表述:

3 数字音频概念区分
3.1 PCM与ADC
PCM(Pulse Code Modulation)是一种模拟信号的数字化方法,ADC(Analog to Digital Converter)芯片是实现这一方法的器件。
3.2 比特率与下载速度
网络带宽常用比特率表示,单位bps,比如千比特每秒Kbps = Kb/s,兆比特每秒Mbps = Mb/s,这里的b是bit(位)。而日常我们说的下载速度的单位是KB/s,MB/s(简写为K/s,M/s),这里的B是Byte(字节),是用来表示文件大小的单位。
字节中的KB、MB、GB的递进关系是1024,而比特率中的kb,Mb,Gb的递进关系则是1000。而且1byte=8bit,所以说 1MB/s ≈ 8Mbps = 8Mb/s。实际上因为网络损耗,运营商口中的带宽bps(b/s)和我们实际理解的下载速度B/s的关系一般是十倍左右。
3.3 音频编码格式和文件格式
[注:在很多语义下,音频编码=音频编码格式,音频文件=音频文件格式]
3.3.1 PCM编码与PCM文件
如上所述,PCM(脉冲编码调制)是一种模拟信号的数字化方法,PCM编码就是这个方法中的数字音频编码方式。PCM编码是最原始的音频编码,其他编码都是在它基础上再次编码和压缩的。
PCM文件是以PCM编码方式存储音频的文件,是未经压缩的原始数字音频文件,通常称为PCM裸流/音频裸数据/raw data。常用文件扩展名是.pcm和.raw,通常它们是不能直接播放的。PCM裸流经过重新编码,封装(见下节)后,比如变为 .wav格式,就可以正常播放了。
3.3.2 编码格式与文件格式的含义
常见的音频文件都有两部分格式:一是文件格式,二是编码格式。两者是不同的概念:文件格式专指存放音频数据的文件的格式,对应文件的扩展名;编码格式则是指音频数据的特定格式,也叫数据格式,音频编码。

3.3.3 常见的编码格式与文件格式
大部分情况下,一种文件格式对应一种音频编码。但是也有例外,比如.caf的文件格式就能包含MP3、LPCM和其他格式编码的音频数据,AAC编码格式对应的文件的扩展名就有.aac、 .mp4 和 .m4a。
文件格式与音频编码的名称有时相同,比如平时我们经常说的mp3既是文件格式,又是编码格式;也有时不同。而且有时它们的称呼也不规范,比如为了方便人们一般称Monkey’s Audio音频编码格式为ape编码。
常用的音频编码格式与文件格式的对应关系总结如下:

3.3.4 有损编码与无损编码
理论上说,任何数字音频都是无法完全还原模拟信号的。不过PCM编码是模拟信号转换为数字信号时的原始编码,它代表着数字音频的最佳保真水平,所以PCM编码就约定俗成为”无损编码”。
上节中的音频编码是对PCM编码进行了二次编码,是为了减小原始PCM编码的体积,所以也叫它们为压缩编码,对应的文件叫压缩格式。
二次编码的音频编码也分为两类:有损编码和无损编码,也称为有损压缩和无损压缩。无损就是指相对PCM编码来说音质相同,有损则是损失了一些音频质量。
4 音频进阶
4.1 比特率的计算
假设有一段采样频率44.1KHz,采样位数16bit,立体声的PCM音频。也就是说,在产生这段音频时间里,1s内系统采样的次数是44100次,每次采样的数据位数是16位,同时进行2通道采样。这就意味着,系统每秒采集的比特数为44100次×16位×2通道 = 1411200个。根据比特率的定义,这段音频的比特率就是1411.2kbit/s。
音频的比特率=采样率×位深度×通道数
此外,如果还知道这段PCM音频文件的时长,还可以计算文件的大小:假设文件时长为1分钟,那么文件大小为1411.2kbit/s × 60s = 84672kbit,而1byte=8bit,所以文件大小为10,584,000B = 10,355.9KB = 10.1MB。
【注意】一个 kb(kilobit,千比特) 表示 1,000比特,而不是普遍被认为的1,024比特。
音频文件大小(B)=比特率(b/s)×时长(s)÷8
对于mp3,wav等其他格式的音频文件,文件里还包括了帧头等其他附加信息,所以文件体积还会稍大一些。
4.2 查看音频文件的参数
对于音视频文件,查看其比特率最简单的方式是右键-属性-详细,就可以直接看到了。

查看更详细的采样率,声道数,位深。

对于音乐播放软件,左侧网易云的标准、较高和极高音质分别对应MP3音频格式中的128、192和320kbit/s三个比特率,无损音质则是对应700~1000kbit/s的flac文件格式。

对于右侧的QQ音乐,是用品质描述+文件大小来表示,标准品质为128kbit/s的MP3,HQ (High Quality) 高音质则是高于128kbit/s的MP3,SQ (Super Quality) 无损品质则采用APE和FLAC无损文件格式。
5.图像的数值表示
5.1 RGB表示方式
任何一个图像都可以由RGB组成,那么一个像素点的RGB该如何表示呢?音频里面的每一个采样 (sample)均使用16个比特来表示,那么像素里面的子像素又该如何表 示呢?常用的表示方式有以下几种。
浮点表示:取值范围为0.0~1.0,比如,在OpenGL ES中对每一个 子像素点的表示使用的就是这种表达方式。
整数表示:取值范围为0~255或者00~FF,8个比特表示一个子像 素,32个比特表示一个像素,这就是类似于某些平台上表示图像格式的 RGBA_8888数据格式。比如,Android平台上RGB_565的表示方法为16 比特模式表示一个像素,R用5个比特来表示,G用6个比特来表示,B用 5个比特来表示。 对于一幅图像,一般使用整数表示方法来进行描述,比如计算一张 1280×720的RGBA_8888图像的大小,可采用如下方式: 1280 * 720 * 4 = 3.516MB 这也是位图(bitmap)在内存中所占用的大小,所以每一张图像的 裸数据都是很大的。
对于图像的裸数据来讲,直接在网络上进行传输也 是不太可能的,所以就有了图像的压缩格式,比如JPEG压缩:JPEG是 静态图像压缩标准,由ISO制定。JPEG图像压缩算法在提供良好的压缩 性能的同时,具有较好的重建质量。这种算法被广泛应用于图像处理领 域,当然其也是一种有损压缩。在很多网站如淘宝上使用的都是这种压 缩之后的图片,但是,这种压缩不能直接应用于视频压缩,因为对于视 频来讲,还有一个时域上的因素需要考虑,也就是说,不仅仅要考虑帧 内编码,还要考虑帧间编码。视频采用的是更成熟的算法。
5.2 YUV表示方式
对于视频帧的裸数据表示,其实更多的是YUV数据格式的表示, YUV主要应用于优化彩色视频信号的传输,使其向后兼容老式黑白电 视。与RGB视频信号传输相比,它最大的优点在于只需要占用极少的频宽(RGB要求三个独立的视频信号同时传输)。其中“Y”表示明亮度 (Luminance或Luma),也称灰阶值;而“U”和“V”表示的则是色度 (Chrominance或Chroma),它们的作用是描述影像的色彩及饱和度, 用于指定像素的颜色。“亮度”是透过RGB输入信号来建立的,方法是将 RGB信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面—— 色调与饱和度,分别用Cr和Cb来表示。

相较于RGB,我们可以计算一帧为1280×720的视频帧,用 YUV420P的格式来表示,其数据量的大小如下: 1280 * 720 * 1 + 1280 * 720 * 0.5 = 1.318MB 如果fps(1秒的视频帧数目)是24,按照一般电影的长度90分钟来 计算,那么这部电影用YUV420P的数据格式来表示的话,其数据量的 大小就是: 1.318MB * 24fps * 90min * 60s = 166.8GB
5.3 YUV和RGB的转化
前面已经讲过,凡是渲染到屏幕上的东西(文字、图片或者其 他),都要转换为RGB的表示形式,那么YUV的表示形式和RGB的表 示形式之间是如何进行转换的呢?对于标清电视601标准,它从YUV转 换到RGB的公式与高清电视709的标准是不同的,通过如下的计算(如 图1-9和图1-10)即可得知。


6.视频的编码方式
6.1 视频编码
音频压缩主要是去除冗余信息,从而实现数据量的压缩。那么对于视频压缩,又该从哪几方面来对数据进行压缩呢?其实与前面提到的音频编码类似,视频压缩也是通过去除冗余信息来进行压缩的。相较于音频数据,视频数据有极强的相关性,也就是说有大量的冗余信息,包括空间上的冗余信息和时间上的冗余信息。 使用帧间编码技术可以去除时间上的冗余信息,具体包括以下几个部分。
- 运动补偿:运动补偿是通过先前的局部图像来预测、补偿当前的局部图像,它是减少帧序列冗余信息的有效方法。
- 运动表示:不同区域的图像需要使用不同的运动矢量来描述运动 信息。
- 运动估计:运动估计是从视频序列中抽取运动信息的一整套技 术。
使用帧内编码技术可以去除空间上的冗余信息。 对于视频,ISO同样也制定了标准:Motion JPEG即MPEG,MPEG算法是适用于动态视频的压缩算法,它除了对单幅图像进行编码外,还利用图像序列中的相关原则 去除冗余,这样可以大大提高视频的压缩比。截至目前,MPEG的版本 一直在不断更新中,主要包括这样几个版本:Mpeg1(用于VCD)、 Mpeg2(用于DVD)、Mpeg4 AVC(现在流媒体使用最多的就是它 了)。 相比较于ISO制定的MPEG的视频压缩标准,ITU-T制定的H.261、 H.262、H.263、H.264一系列视频编码标准是一套单独的体系。其中, H.264集中了以往标准的所有优点,并吸取了以往标准的经验,采用的是简洁设计,这使得它比Mpeg4更容易推广。现在使用最多的就是 H.264标准,H.264创造了多参考帧、多块类型、整数变换、帧内预测等新的压缩技术,使用了更精细的分像素运动矢量(1/4、1/8)和新一代 的环路滤波器,这使得压缩性能得到大大提高,系统也变得更加完善。
6.2 编码概念
1. IPB帧
视频压缩中,每帧都代表着一幅静止的图像。而在进行实际压缩 时,会采取各种算法以减少数据的容量,其中IPB帧就是最常见的一 种。
- I帧:帧内编码帧(intra picture),I帧通常是每个GOP(MPEG所 使用的一种视频压缩技术)的第一个帧,经过适度地压缩,作为随机访 问的参考点,可以当成静态图像。I帧可以看作一个图像经过压缩后的 产物,I帧压缩可以得到6:1的压缩比而不会产生任何可觉察的模糊现 象。I帧压缩可去掉视频的空间冗余信息,下面即将介绍的P帧和B帧是 为了去掉时间冗余信息。
- P帧:前向预测编码帧(predictive-frame),通过将图像序列中前 面已编码帧的时间冗余信息充分去除来压缩传输数据量的编码图像,也 称为预测帧。 ·B帧:双向预测内插编码帧(bi-directional interpolated prediction frame),既考虑源图像序列前面的已编码帧,又顾及源图像序列后面 的已编码帧之间的时间冗余信息,来压缩传输数据量的编码图像,也称 为双向预测帧。 基于上面的定义,我们可以从解码的角度来理解IPB帧。 ·I帧自身可以通过视频解压算法解压成一张单独的完整视频画面, 所以I帧去掉的是视频帧在空间维度上的冗余信息。 ·P帧需要参考其前面的一个I帧或者P帧来解码成一张完整的视频画 面。
- B帧则需要参考其前一个I帧或者P帧及其后面的一个P帧来生成一 张完整的视频画面,所以P帧与B帧去掉的是视频帧在时间维度上的冗 余信息。
2. PTS与DTS
DTS主要用于视频的解码,英文全称是Decoding Time Stamp,PTS 主要用于在解码阶段进行视频的同步和输出,全称是Presentation Time Stamp。在没有B帧的情况下,DTS和PTS的输出顺序是一样的。因为B 帧打乱了解码和显示的顺序,所以一旦存在B帧,PTS与DTS势必就会不同。
3.GOP的概念
两个I帧之间形成的一组图片,就是GOP(Group Of Picture)的概念。通常在为编码器设置参数的时候,必须要设置gop_size的值,其代 表的是两个I帧之间的帧数目。

注:频率单位赫兹(Hertz,简称 Hz)是为了纪念德国物理学家海因里希·鲁道夫·赫兹(Heinrich Rudolf Hertz)。海因里希·赫兹于1888年通过实验证明了电磁波的存在,成功地验证了麦克斯韦方程组的预言。这一发现对无线电通信和现代电磁技术的发展起到了重要的推动作用。
在他的名字命名之前,频率的常用单位是“每秒周期数”(cycles per second)。1948年,国际度量衡大会正式采用“赫兹”作为频率的单位,以表彰他在电磁学领域的贡献。1赫兹代表每秒完成一个周期的振动或波动。
因此,我们现在使用的频率单位“赫兹”是对海因里希·赫兹在科学上贡献的一种纪念。