写给自己的音视频笔记- [音频基础]

461 阅读18分钟

1. 音频

1.1 基本概念

1.1.1 音频三要素: 频率、振幅、波形

频率: 声波频率,即声音的音调,人类听觉的频率范围在20Hz~20Khz
振幅: 声波的响度,通俗就是声音的高低,男生的声音振幅大于女生
波形: 声音的音色,同样的频率和振幅下,钢琴和小提琴的声音听起来完全不同

image.png

1.1.2 编码过程: 模拟信号->抽样->量化->编码->数字信号

image.png

1.1.3 概念整理

  • 奈奎斯特采样定律: 采样率大于或等于连续信号最高频率分量的 2 倍时,采样信号可以用来完美重构 原始连续信号
  • 比特率: 表示经过编码(压缩)后的音频数据每秒钟需要用多少个比特来表示,单位常为 kbp
  • 响度: 响度主要随声音的强度而变化,但也受频率的影响
  • 强度: 声音的主观属性响度表示的是一个声音听来有多响的程度.
  • 采样: 所谓的采样就是只在时间轴上对信号进行数字化。把连续的时间信号,变成离散的数字信号. 根据奈奎斯特定律(也称作采样定律),按照比声音最高频率的 2 倍以上进行采样.人类听觉的频率(音调)范围为 20Hz--20KHz。所以至少要40Khz.采样频率一般为 44.1kHz,这样可保证声音达到 20kHz 也
  • 采样率: 指每秒钟采集多少个样本,每秒获取声音样本次数。声音是一种能量波,其具有音频频率和振幅的特征.那么采样的过程,其实就是抽取某点的频率值。那么,如果我们在一秒钟抽取的点越多,获得的信息也就越多; 采样率越高,声音的质量就越好。但是并不是说采样率越高就越好了,因为人耳听觉的范围为 20Hz ~ 20kHz
  • 采样数: 采样数跟采样率和时间有关系,比如采样率为 44100Hz,采样时间为 1s,那么 1s 内的采 样数就为 44100 个
  • 采样位数: 采样位数也叫采样大小或者量化位数.量化深度表示每个采样点用多少比特表示,音频的量化深度一般为 8、16、32 位等.量化深度的大小影响到声音的质量,显然,位数越多,量化后的波形越接近原始波形,声音的质量越高,而需要的存储空间也越多;位数越少,声音的质量越低,需要的存储空间 越少
  • 通道数: 即声音的通道数目,常见的有单声道和双声道或者立体声道
  • 音频帧: 音频跟视频不太一样,视频的每一帧就是一副图像,但是因为音频是流式的,本身是没有 一帧的概念的.比如对于 PCM 流来说,采样率为 44100Hz,采样位数为 16,通道数为 2,那么一秒的 音频固定大小的:44100162 / 8 字节.但是人们可以规定一帧的概念,比如 amr 帧比较简单,它规定每 20ms 的音频是
  • 比特率(码率): 指音频每秒钟播放的数据量,单位为 bit,例如对于 PCM 流,采样率为 44100Hz,采样大小为 16,声道数为 2,那么码率为:44100* 16 * 2 = 141120bps
  • 音频文件大小计算: 文件大小 = 采样率 * 录音时间 * 采样位数 / 8 * 通道数
  • PCM流: 通常把音频采样过程也叫做脉冲编码调制编码,即 PCM(Pulse Code Modulation)编 码,采样值也叫 PCM 值

1.1.4 音频处理

  • 噪音抑制
  • 回声消除
  • 自动增益控制
  • 静音检测
  • 舒适噪音产生

1.1.5 常见音频格式

  • WAV格式,微软开发
  • MP3全称MPEG-1 Audio Layer3.MP3 能够以高音质、低采样率对数字音频文件进行压缩。应用最普遍
  • AAC: 是高级音频编码的缩写.由 Fraunhofer IIS-A、杜比和 AT&T 共同开发的音频格式.是 MPEG-2 规范的一部分.AAC 可以在比 MP3 文件缩小 30%的前提下提供更
  • APE: 无损压缩音频格式,在音质不降低的前提下,大小压缩到传统无损格式WAV 文件的一半
  • FLAC: 是 Free Lossless Audio Codec 的缩写,是一套著名的自由音频无损压缩编码,其特点是无损压缩

1.1.6 混音技术介绍

混音: 就是把两路或者多路音频流混合在一起,形成一路音频流
混流: 指音视频流的混合,也就是视频画面和声音的对齐,也称混流
并非任何两路音频流都可以直接混合
两路音视频流,必须符合以下条件才能混合:

  • 格式相同,要解压成 PCM 格式
  • 采样率相同,要转换成相同的采样率。主流采样率包括:16k Hz、32k Hz、44.1k Hz 和 48kHz
  • 帧长相同,帧长由编码格式决定,PCM 没有帧长的概念,开发者自行决定帧长。为了和主流音频编码格式的帧长保持一致,推荐采用 20ms 为帧长
  • 位深(Bit-Depth)或采样格式 (Sample Format) 相同,承载每个采样点数据的 bit 数目要相同
  • 声道数相同,必须同样是单声道或者双声道 (立体声)。这样,把格式、采样率、帧长、位深和声道数对齐了以后,两个音频流就可以混合了

在混音之前,还需要做回声消除、噪音抑制和静音检测等处理
音频重采样: 重采样即是将音频进行重新采样得到新的采样率的音频

原因: 音频系统中可能存在多个音轨,而每个音轨的原始采样率可能是不一致的. 比如在播放音乐的过程中,来了一个提示音,就需要把音乐和提示音都混合到 codec 输 出,音乐的原始采样率和提示音的原始采样率可能是不一致的 问题来了,如果 codec 的采样率设置为音乐的原始采样率的话,那么提示音就会失真。 因此最简单有效的解决方法是:codec 的采样率固定一个值(44.1KHz/48KHz),所有 音轨都重采样到这个采样率,然后才送到 codec,保证所有音轨听起来都不失真


1.2 音频编码

1.2.1 压缩编码

原理是压缩掉冗余的信号,冗余信号是指不能被人耳感知到的信号,包括人耳听觉范围之外的音频信号以及被掩蔽掉的音频信号
量化的过程被称之为编码,根据不同的量化策略,产生了许多不同的编码方式.
常见的编码方式有:PCM 和 ADPCM,这些数据代表着无损的原始数字音频信号,添加一些文件头信息,就可以存储为 WAV 文件了,它是一种由微软和 IBM 联合开发的用于音频数字存储的标准,可以很容易地被解析和播放

1.2.2 音频信号压缩编码标准:

ITU/CCITT的G系列:G.711、 G.721、 G.722、 G.723、G.728、 G.729
MPEG系列的:MPEG-l,MPEG-2,MPEG-4,MPEG-7 中的音频编码

1.2.3 音频压缩

1). 音频信号能压缩的基本依据

  • 声音信号中存在大量的冗余度
  • 人的听觉具有强音能抑制同时存在的弱音现象

2). 音频信号压缩编码的分类

  • 无损压缩(熵编码): 霍夫曼编码、算术编码、行程编码
  • 有损编码:

波形编码--PCM、DPCM、ADPCM 、子带编码、矢量量化

参数编码--LPC 混合编码--MPLPC、CELP

1.2.4 音频编码基本手段: 量化和量化器

  • 量化和量化器:量化是把离散时间上的连续信号,转化成离散时间上的离散信号
  • 常见的量化器有:均匀量化器,对数量化器,非均匀量化器
  • 量化过程追求的目标是:最小化量化误差,并尽量减低量化器的复杂度(这 2 者本身就是一个矛盾)

常见量化器的优缺点

  • 均匀量化器:最简单,性能最差,仅适应于电话语音
  • 对数量化器:比均匀量化器复杂,也容易实现,性能比均匀量化器好
  • 非均匀(Non-uniform)量化器:根据信号的分布情况,来设计量化器。信号密集的地方进行细致的量化,稀疏的地方进行粗略量化

1.2.5 常见音频压缩格式

  1. WAV编码:

WAV 编码是在 PCM 数据格式的前面加上 44 字节,分别用来描述 PCM 的采样率、声道数、数据格式等信息。特点:音质非常好、大量软件都支持。使用场景:多媒体开发的中间文件、保存音乐和音效素材等

image.png 2. MP3编码:

MP3 具有不错的压缩比,使用 LAME 编码的中高码率的 MP3 文件,听感上非常接近源WAV 文件。特点:音质在 128Kbps 以上表现还不错,压缩比比较高,兼容性好。使用场景:高比特率下对兼容性有要求的音乐欣赏

  1. AAC编码:

AAC 是新一代的音频有损压缩技术,它通过一些附加编码技术(如 PS、SBR 等),衍生出 LC-AAC、HE-AAC、HE-AAC V2 三中主要编码格式. 特点:在小于 128kbps 码率下表现优异,且多用于视频中的音频编码。适用场景:128Kbps 码率下的音频编码,多用于视频中的音频轨的编码

  1. FLAC编码:

FLAC 中文可解释为无损音频压缩编码.FLAC 是一套著名的自由音频压缩编码,其特点是无损压缩。不同于其他有损压缩编码如 MP3 及 AAC,它不会破坏任何原有的音频信息,所以可以还原音乐光盘音质

1.2.6 音频压缩(本质: 消除冗余数据)

  1. 频谱掩蔽效应
  • 去除人耳听觉频率范围临界附近的值
  • 大声音附近如果有小的声音可以去除
  • 时域屏蔽效应
  • 高声附近 50ms 内如果声音比较小可以去掉
  • 无损压缩
  1. 时域掩蔽效应
    当强音信号和弱音信号同时出现时,弱信号会听不到,因此,弱音信号也属于冗余信号

1.2.7 常见的音频编码器

OPUS、AAC、Vorbis、Speex、iLBC、AMR、G.711

OPUS: 目前性能最好、质量最高,但是由于时间短,暂时还没有普及,rtmp 协议还不支持它
AAC: 有损压缩算法,目的取缔 mp3,压缩率很高、但还能接

MPEG-4 标准出现后,加入了 SBR 技术和 PS 技术,目前常用规格有 AAC LC、AAC HE V1、AAC HE V2

  • AAC LV:低复杂度,128k
  • AAC HE V1:AAC+SBR 分频编码,低频(减少采样率)和高频(增加采样率)分开编码
  • AAC HE V2:AAC+SBR+PS 由于声道间相同的性质很大,所以对于其它声道只要存储一些差异性的特征

AAC格式

ADIF-只能从头开始解码,常用于磁盘文件中;
ADTS 每帧都有一个头信息,可以在音频流的任何位置解码,但是占用比较大
AAC 编码库: Libfdk_AAC > ffmpeg AAC > libfaac > libvo


1.2 AAC编码基础

AAC 是高级音频编码(Advanced Audio Coding)的缩写,出现于 1997 年,最初是基于MPEG-2 的音频编码技术,目的是取代 MP3格式.2000年,MPEG-4标准出台,ACC重新继承了其他技术(PS, SBR),为区别于传统的MPEG-2 AAC,故含有SBR或PS特性的AAC又称为MPEG-4 AAC

AAC 是新一代的音频有损压缩技术,它通过一些附加的编码技术(比如 PS,SBR等),衍生出了 LC-AAC,HE-AAC,HE-AACv2 三种主要的编码。其中 LC-AAC 就是比较传统的 AAC,相对而言,主要用于中高码率(>=80Kbps),HE-AAC(相当于 AAC+SBR)主要用于中低码(<=80Kbps),而新近推出的 HE-AACv2(相当于 AAC+SBR+PS)主要用于低码率(<=48Kbps)。事实上大部分编码器设成<=48Kbps 自动启用 PS 技术,而>48Kbps 就不加 PS,就相当于普通的 HE-AAC

1.2.1 AAC编码规格简述

AAC 共有 9 种规格,以适应不同的场合的需要
MPEG-2 AAC LC 低复杂度规格(Low Complexity) 注:比较简单,没有增益控制,但提高了编码效率,在中等码率的编码效率以及音质方面,都能找到平衡点

  • MPEG-2 AAC Main 主规格
  • MPEG-2 AAC SSR 可变采样率规格(Scaleable Sample Rate)
  • MPEG-4 AAC LC 低复杂度规格(Low Complexity)---现在的手机比较常见的 MP4 文件中的音频部份就包括了该规格音频文件
  • MPEG-4 AAC Main 主规格 注:包含了除增益控制之外的全部功能,其音质最好
  • MPEG-4 AAC SSR 可变采样率规格(Scaleable Sample Rate)
  • MPEG-4 AAC LTP 长时期预测规格(Long Term Predicition)
  • MPEG-4 AAC LD 低延迟规格(Low Delay)
  • MPEG-4 AAC HE 高效率规格(High Efficiency)---这种规格适合用于低码率编码,有 Nero ACC 编码器支持

目前使用最多的是 LC 和 HE(适合低码率)
流行的 Nero AAC 编码程序只支持 LC,HE,HEv2 这三种规格,编码后的 AAC音频,规格显示都是 LC。HE 其实就是 AAC(LC)+SBR 技术,HEv2 就是 AAC(LC)+SBR+PS 技术
这里再说明一下 HE 和 HEv2 的相关内容: HE -> “High Efficiency”(高效性):

HE-AAC v1(又称 AACPlusV1,SBR),用容器的方法实现了 AAC(LC)+SBR 技术。SBR 其实代表的是 Spectral Band Replication(频段复制)
简要叙述一下,音乐的主要频谱集中在低频段,高频段幅度很小,但很重要,决定了音质.如果对整个频段编码,若是为了保护高频就会造成低频段编码过细以致文件巨大;若是保存了低频的主要成分而失去高频成分就会丧失音质
SBR 把频谱切割开来,低频单独编码保存主要成分,高频单独放大编码保存音质,“统筹兼顾”了,在减少文件大小的情况下还保存了音质,完美的化解这一矛盾

HEv2:

用容器的方法包含了 HE-AAC v1 和 PS 技术。PS 指“parametric stereo”(参数立体声)。原来的立体声文件文件大小是一个声道的两倍。但是两个声道的声音存在某种相似性,根据香农信息熵编码定理,相关性应该被去掉才能减小文件大小。所以 PS 技术存储了一个声道的全部信息,然后,花很少的字节用参数描述另一个声道和它不同的地方

1.2.2 AAC编码特点

①. AAC是一种高压缩比的音频压缩算法,但它的压缩比要远超过较老的音频压缩算法,如 AC-3、MP3 等。并且其质量可以同未压缩的 CD 音质相媲美
②. 同其他类似的音频编码算法一样,AAC 也是采用了变换编码算法,但 AAC使用了分辨率更高的滤波器组,因此它可以达到更高的压缩比
③. AAC 使用了临时噪声重整、后向自适应线性预测、联合立体声技术和量化哈夫曼编码等最新技术,这些新技术的使用都使压缩比得到进一步的提高
④. AAC 支持更多种采样率和比特率、支持 1 个到 48 个音轨、支持多达 15 个低频音轨、具有多种语言的兼容能力、还有多达 15 个内嵌数据流
⑤. AAC 支持更宽的声音频率范围,最高可达到 96kHz,最低可达 8KHz,远宽于MP3 的 16KHz-48kHz 的范围
⑥. 不同于 MP3 及 WMA,AAC 几乎不损失声音频率中的甚高、甚低频率成分,并且比 WMA 在频谱结构上更接近于原始音频,因而声音的保真度更好。专业评测中表明,AAC 比 WMA 声音更清晰,而且更接近原声音
⑦. AAC 采用优化的算法达到了更高的解码效率,解码时只需较少的处理能力

1.2.3 AAC音频文件格式

AAC的音频文件格式有: ADIF、ADTS
ADIF: Audio Data Interchange Format 音频数据交换格式

这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码, 即它的解码必须在明确定义的开始处进行。故这种格式常用在磁盘文件中

ADTS: Audio Data Transport Stream 音频数据传输流

这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。它的特征类似于mp3 数据流格式

简单说,ADTS 可以在任意帧解码,也就是说它每一帧都有头信息。ADIF 只有一个统一的头,所以必须得到所有的数据后解码。这两种的 header 的格式也是不同的,一般编码后的和抽取出的都是 ADTS 格式的音频流
AAC的ADIF文件格式如下图: image.png AAC的ADTS文件中一帧格式如下: image.png 上图中两边的空白矩形表示一帧前后的数据
1. ADIF的Header结构
ADIF的头信息如下:
image.png
ADIF 头信息位于 AAC 文件的起始处,接下来就是连续的 Raw Data Blocks
组成 ADIF 头信息的各个域如下图所示:
image.png

2. ADTS的Header头结构
ADTS的固定头信息 image.png
ADTS的可变头信息
image.png
(1) 帧同步目的在于找出帧头在比特流中的位置,13818-7 规定,AAC ADTS 格式的帧头同步字为 12 比特的“1111 1111 1111
(2) ADTS 的头信息为两部分组成,其一为固定头信息,紧接着是可变头信息。固定头信息中的数据每一帧都相同,而可变头信息则在帧与帧之间可变

3. AAC 元素信息
在AAC中,原始数据块的组成可能有6种不同的元素

  • SCE: Single Channel Element 单通道元素。单通道元素基本上只由一个 ICS 组成。一个原始数据块最可能由 16 个 SCE 组成
  • CPE: Channel Pair Element 双通道元素,由两个可能共享边信息的 ICS 和一些联合立体声编码信息组成。一个原始数据块最多可能由 16 个 SCE 组成
  • CCE: Coupling Channel Element 藕合通道元素。代表一个块的多通道联合立体声信息或者多语种程序的对话信息
  • LFE: Low Frequency Element 低频元素。包含了一个加强低采样频率的通道
  • DSE: Data Stream Element 数据流元素,包含了一些并不属于音频的附加信息
  • PCE: : Program Config Element 程序配置元素。包含了声道的配置信息。它可能出现在 ADIF 头部信息中
  • FIL: : Fill Element 填充元素。包含了一些扩展信息。如 SBR,动态范围控制信息等

4. AAC文件处理流程

(1). 判断文件格式,确定为 ADIF 或 ADT
(2). 若为 ADIF,解 ADIF 头信息,跳至第6步
(3). 若为 ADTS,寻找同步头
(4). 解 ADTS帧头信息
(5). 若有错误检测,进行错误检测
(6). 解块信息
(7). 解元素信息

5. 编码算法处理流程
首先对输入的 PCM 信号分段,每帧每声道 1024 个样本,采用 1/2 重叠,组合得到 2048 个样本.

    加窗后,进行离散余弦变化(MDCT),输出 1024 个频谱分量,依据不同采样率和变换块类型划分成 10 个不同带宽的比例因子频带。其中变化块类型由 心理声学模型 计算分析得到,该模型还将输出 信掩比,用于后续模块的处理      AAC 还使用了一种新的称为时域噪声整形的技术,简称为 TNS

    TNS 的作用机理在于利用了时域和频域信号的对偶性。在立体声编码方面,AAC 既支持 M/S,又支持 L/R,两者的选择准则是看比特数的消耗。基于人耳对高频的定位主要取决于能量的特点,采用了增强立体声(IS)技术,对耦合声道只传一路包络。经过前述多个模块的预处理后,在量化和编码阶段才真正降低了数据量使用非均匀量化来改善小信号的信噪比,把比例因子频带合并成分区后再对频谱分量进行霍夫曼编码.

    量化和编码使用一种两层嵌套循环算法,以权衡码率和失真之间的矛盾

    最后,进行比特流封装,得到压缩后的码流