目录
- 序言
- 声音的物理性质
- 数字音频
- 音频编码
- 图像的物理现象
- 图像的数值表示
- 视频的编码方式
一 序言
音视频技术是为了记录,存储和回放声学现象才发明的。
当人类有了记录以及存储声音的能力后,就迎来了模拟信号
到数字信号
的转换。
二 声音的物理性质
2.1 声音是波
声音是由物体振动而产生的。
声音是一种压力波,当演奏乐器、 拍打一扇门或者敲击桌面时,它们的振动都会引起空气有节奏的振动, 使周围的空气产生疏密变化,形成疏密相间的纵波(可以理解为石头落入水中激起的波纹),由此就产生了声波,这种现象会一直延续到振动 消失为止。
2.2 声波的三要素
声波的三要素是频率
、振幅
和波形
- 频率代表音阶的高低
- 振幅代表响度
- 波形代表音色
分贝常用于描述响度的大小
波 的形状决定了其所代表声音的音色
2.3 声音的传播介质
声音的传播介质 很广,它可以通过空气、液体和固体进行传播;而且介质不同,传播的 速度也不同。
声音在真空中是无法传播的。
2.4 共鸣
声音的传播过程也是一种能量的传播过程。
三 数字音频
本节将分3个概念对数字音频进行讲解, 分别是采样
、量化
和编码
。
3.1 采样
所谓采样
就是在时间轴上对信号进行数字化
。根据奈奎斯特定理(也称为采样定 理),按比声音最高频率高2倍以上的频率对声音进行采样(也称为AD 转换)
对于高质量的音频信号,其频率范围(人耳 能够听到的频率范围)是20Hz~20kHz
,所以采样频率一般为 44.1kHz
。
44.1kHz
就是代表1秒会采样44100
次。
3.2 量化
具体的每个采样又该如何表示呢?
这就涉及将要讲解的第二个概念:量化
,量化是指在幅度轴上对信号进行数字化。
3.3 编码
既然每一个量化
都是一个采样
,那么这么多的采样该如何进行存储
呢?
这就涉及将要讲解的第三个概念:编码
。所谓编码,就是按照一定的格式记录采样
和量化
后的数字数据,比如顺序存储
或压缩存储
等。
这里面涉及了很多种格式,通常所说的音频
的裸数据
格式就是脉冲 编码调制(Pulse Code Modulation,PCM
)数据。
描述一段PCM数据一 般需要以下几个概念:量化格式
(sampleFormat)、采样率
(sampleRate)、声道数
(channel)。
以CD的音质为例:
1.量化格式(有的地方描述为位深度)为16比特(2字节)
2.采样率为44100
3.声道数为 2
这些信息就描述了CD的音质。而对于声音格式,还有一个概念用来描述它的大小,称为数据比特
率,即1秒时间内的比特数目
,它用于衡 量音频数据单位时间内的容量大小。而对于CD音质的数据,比特率为 多少呢?计算如下
44100 * 16 * 2 = 1378.125kbps
分贝是用来表示声音强度
的单位。所谓分贝是指两个相同的 物理量(例如,A1和A0)之比取以10为底的对数并乘以10(或20), 即:
N = 10 * lg(A1 / A0)
四 音频编码
压缩算法包括有损压缩和无损压缩。
根据不同的应用场景(包括存储设备、传输网络环境、播放设备 等),可以选用不同的压缩编码算法,如PCM
、WAV
、AAC
、MP3
、 Ogg
等。
压缩编码的原理实际上是压缩掉冗余信号
,冗余信号是指不能被人 耳感知到的信号,包含人耳听觉范围之外的音频信号以及被掩蔽掉的音 频信号等。
下面介绍几种常用的压缩编码格式。
WAV编码
WAV编码的一种实现(有多种实现方 式,但是都不会
进行压缩操作)就是在PCM数据格式的前面加上44字节,分别用来描述PCM的采样率
、声道数
、数据格式
等信息。
-
特点
:音质非常好,大量软件都支持。 -
适用场合
:多媒体开发的中间文件、保存音乐和音效素材。
MP3编码
MP3
具有不错的压缩比
,使用LAME
编码(MP3编码格式的一种实 现)的中高码率的MP3文件,听感上非常接近源WAV
文件。
-
特点
音质在128Kbit/s以上表现还不错,压缩比比较高,大量软件和硬件都支持,兼容性好。 -
适用场合
高比特率下对兼容性有要求的音乐欣赏。
AAC编码
AAC
是新一代的音频有损压缩技术,它通过一些附加的编码技术 (比如PS
、SBR
等),衍生出了LC-AAC
、HE-AAC
、HE-AAC v2
三种 主要的编码格式。
-
特点
在小于128Kbit/s的码率下表现优异,并且多
用于视频中的音 频编码。 -
适用场合
128Kbit/s以下的音频编码,多用于视频中音频轨的编码。
Ogg编码
Ogg是一种非常有潜力的编码,在各种码率下都有比较优秀的表现,尤其是在中低码率场景下。
-
特点
可以用比MP3更小的码率实现比MP3更好的音质,高中低码 率下均有良好的表现,兼容性不够好,流媒体特性不支持。 -
适用场合
语音聊天的音频消息场景。
五 图像的物理现象
红绿蓝三种色光无法被 分解,故称为三原色光。
六 图像的数值表示
6.1 RGB表示方式
那么像素里面的子像素又该如何表 示呢?常用的表示方式有以下几种。
整数表示:取值范围为0255或者00FF,8个比特表示一个子像素,32个比特表示一个像素,这就是类似于某些平台上表示图像格式的 RGBA_8888
数据格式。
对于一幅图像,一般使用整数表示方法来进行描述,比如计算一张 1280×720的RGBA_8888图像的大小,可采用如下方式:
1280 * 720 * 4 = 3.516MB
比如JPEG
压缩:JPEG是 静态图像压缩标准,由ISO制定。
6.2 YUV表示方式
对于视频帧的裸数据
表示,其实更多的是YUV
数据格式的表示, YUV主要应用于优化
彩色视频信号的传输,使其向后兼容老式黑白电 视。
与RGB
视频信号传输相比,它最大的优点
在于只需要占用极少的频 宽(RGB要求三个独立的视频信号同时传输)。
Y
表示明亮度
(Luminance或Luma),也称灰阶值。
U
和V
表示的则是色度
(Chrominance或Chroma),它们的作用是描述影像的色彩及饱和度, 用于指定像素的颜色。
之所以采用YUV
色彩空间,是因为它的亮度信号Y
和色度信号U
、 V
是分离
的。
YUV
最常用的采样格式是4:2:0
,4:2:0并不意味着只有Y、Cb 而没有Cr分量。它指的是对每行扫描线来说,只有一种色度分量是以 2:1的抽样率来存储的。
相较于RGB,我们可以计算一帧为1280×720的视频帧,用YUV420P
的格式来表示,其数据量的大小如下:
1280 * 720 * 1 + 1280 * 720 * 0.5 = 1.318MB
6.3 YUV和RGB的转化
凡是渲染到屏幕上的东西(文字、图片或者其 他),都要转换为RGB的表示形式。
七 视频的编码方式
7.1 视频编码
视频压缩
也是通过去除冗余信息来进行压缩
的。相较于音频数据,视频数据有极强的相关性,也就是说有大量的冗余信息,包括空间
上的冗余信息和时间
上的冗余信息。
使用帧间编码
技术可以去除时间
上的冗余信息,具体包括以下几个 部分。
-
运动补偿
运动补偿是通过先前的局部图像来预测、补偿当前的局部图像,它是减少帧序列冗余信息的有效方法。 -
运动表示
不同区域的图像需要使用不同的运动矢量来描述运动信息。 -
运动估计
运动估计是从视频序列中抽取运动信息的一整套技术。
使用帧内编码
技术可以去除空间
上的冗余信息。
对于视频,ISO同样也制定了标准:Motion JPEG即MPEG
,MPEG算法是适用于动态视频
的压缩算法
。主要包括这样几个版本:Mpeg1(用于VCD)、 Mpeg2(用于DVD)、Mpeg4 AVC
(现在流媒体使用最多的就是它 了)。
相比较于ISO
制定的MPEG
的视频压缩标准
,ITU-T
制定的H.261
、 H.262
、H.263
、H.264
一系列视频编码标准
是一套单独的体系。
现在使用最多的就是 H.264
标准,H.264创造了多参考帧
、多块类型
、整数变换
、帧内预测
等新的压缩技术。
7.2 编码概念
IPB帧
-
I帧
帧内编码帧(intra picture),I帧通常是每个GOP
(MPEG所 使用的一种视频压缩技术)的第一个帧,经过适度地压缩,作为随机访问的参考点,可以当成静态图像。
I帧
可以看作一个图像经过压缩后的产物,I帧压缩可以得到6:1的压缩比而不会产生任何可觉察的模糊现 象。
I帧
压缩可去掉视频的空间
冗余信息,属于帧内编码
技术。
P帧
前向预测编码帧(predictive-frame),通过将图像序列中前 面已编码帧的时间冗余信息充分去除来压缩传输数据量的编码图像,也称为预测帧
。B帧
双向预测内插编码帧(bi-directional interpolated prediction frame),既考虑源图像序列前面的已编码帧,又顾及源图像序列后面 的已编码帧之间的时间冗余信息,来压缩传输数据量的编码图像,也称为双向预测帧
。
基于上面的定义,我们可以从解码的角度来理解IPB帧。
-
I帧
自身可以通过视频解压算法解压成一张单独的完整视频画面,
所以I帧去掉的是视频帧在空间
维度上的冗余信息。 -
P帧
需要参考其前面的一个I帧或者P帧来解码成一张完整的视频画
面。 -
B帧
则需要参考其前一个I帧
或者P帧
及其后面的一个P帧
来生成一 张完整的视频画面,所以P帧与B帧去掉的是视频帧在时间
维度上的冗 余信息。
IDR帧与I帧的理解
-
IDR帧
就是一种特殊的I帧
。 - 在解码器中,一旦收到一个
IDR帧
,就会立即清理参考帧缓冲区,并将IDR帧
作为被参考
的帧。
PTS与DTS
DTS
主要用于视频的解码
,英文全称是Decoding Time Stamp,
PTS
主要用于在解码阶段进行视频的同步
和输出
,全称Presentation Time Stamp。
在没有B帧
的情况下,DTS
和PTS
的输出顺序是一样的。
FFmpeg
中使用AVPacket
结构体来描述解码前或编码后的压缩数据,用AVFrame
结构体来描述解码后或编码前的原始数据。
对于视频来说,AVFrame
就是视频 的一帧图像,这帧图像什么时候显示给用户,取决于它的PTS
。DTS
是AVPacket
里的一个成员,表示该压缩包应该在什么时候被解码
。
GOP的概念
两个I帧之间形成的一组图片,就是GOP
(Group Of Picture)的概 念。通常在为编码器设置参数的时候,必须要设置gop_size
的值,其代 表的是两个I帧之间的帧数目
。
在提高视频质量的技巧中,还有个技巧是多使用B帧
。
一般来说,I
的压缩率是7(与JPG差不多),P
是20,B
可以达到50,可见使用B帧能节省大量空间。
结合IPB帧和图1-11,相信大家能够更好地理解PTS与DTS的概念。
本文是对音视频开发进阶指南书籍的总结。