【ffmpeg】音频采集
- 前言
- 音频压缩技术
-
- 几种常见编码器的比较
- AAC编码器介绍
- ADTS格式
- 通过ffmpeg生成AAC数据
- 参考资料
个人简介
个人主页:一二三o-0-O的博客
技术方向:C/C++客户端资深工程师(直播+音视频剪辑)
作者简介:数据结构算法与音视频领域创作者
系列专栏:ffmpeg入门
专栏目标:务实的掌握FFmpeg相关专业知识
如果对您有帮助的话,欢迎点赞收藏,关注不迷路
前言
如果是刚刚开始学习音视频的伙伴,可以先看看音视频基 础专栏系列的内容,掌握音视频相关的一些基础理论。
音视频基础专栏系列
(一)【音视频基础】音频基础理论
(二)【音视频基础】视频基础理论
(三)【音视频基础】封装格式与编码数据
如果觉得理论学习枯燥的伙伴,可以先通过以下四篇文章使用ffmpeg实现一个播放器,可以获得些许成就感,为持续在音视频领域扎根打好兴趣基础。
ffmpeg专栏系列
(一)【ffmpeg】ffmpeg命令工具的使用
(二)【ffmpeg】视频解码器
(三)【ffmpeg】SDL视频显示
(四)【ffmpeg】ffmpeg+SDL实现播放器
本节主要阐述音频编码的原理。
音频压缩技术
- 音频压缩技术是在保证信号在听觉方面不产生失真的前提下,对音频数据信号进行尽可能大的压缩。压缩的主要方法是去除采集到的音频冗余信息。
- 冗余信息包括人耳听觉范围外的音频信号以及被遮蔽掉的音频信号。
- 音频压缩分为两种。
- 有损压缩:消除冗余信息后,无法还原出原声。
- 无损压缩:消除冗余信息后仍能够还原出远程。
有损压缩
无损压缩
- 熵编码(即无损编码),其基本原理是将用短的编码替代高频的词汇、句子,用长的句代表低频词。熵编码常用的三种方法:
- 音频编码过程:采集到原始的音频数据,经过时域转频域变换(将一段长时间的数据交给频域转换器),并且通过心理声学模型(滤掉人听觉范围以外的频率+遮蔽),将这两个数据汇总之后进行量化编码(有损、无损编码),编码后得到的比特流的数据(压缩完成后的数据)就可以用在网络的传输上。流程图如下图所示:
几种常见编码器的比较
- 常见的音频编码器包括OPUS、AAC、Ogg、Speex、iLBC、AMR、G.711等。其中AAC在直播系统中应用的比较广泛;OPUS是最新的音频编码器,WebRTC默认使用OPUS;固话一般用的G.711。
- OPUS:目前较新的音频编解码器,WebRTC默认使用OPUS;延迟小,压缩率高。应用在在线教育,视频会议。
- AAC:在直播系统中应用比较广泛的编解码器;(分软件和硬件)不适合实时性要求较高的场景。
- Ogg:软件收费,应用比较少;
- Speex:显著的特点是支持回音消除,是七八年前应用非常广泛的编解码器。
- G.711:固话、电话使用的窄带音频编解码器,但是音损非常严重,不适合实时通信。
- 编解码质量对比如下:
- 音频编码码率对比
AAC编码器介绍
- AAC(Advanced Audio Coding)由Fraunhofer IIS、杜比实验室、AT&T、Sony等公司共同开发,目的是取代MP3格式。与MP3格式的比较:MP3的压缩率比较低,压缩后的文件大;AAC的压缩率比较高,保真性强,即使压缩成很小的数据,还原度仍然很高。最初是基于MPEG-2的音频编码技术,在MPEG-4标准出现后,AAC加入了SBR技术和PS技术。
- 常用的规格
- AAC LC:(Low Complexity)低复杂度规格,码流128k,音质好
- AAC HE V1:等于AAC LC+ SBR(Spectral Band Replication)。其核心思想是按频谱保存。低频编码保存主要成分,高频单独放大编码保存音质。码流在64k左右
- AAC HE V2:等于AAC LC + SBR +PS(Parametric Stereo)。其核心思想是双声道中的声音存在某种相似性,只需存储一个声道的全部信息,然后,花很少的字节用参数描述另一个声道和它不同的地方。
- 规格关系如下图:
- AAC格式
- ADIF(Audio Data Interchange Format):这种格式的特征是可以确定找到这个音频数据的开始,只能从头开始解码,不能在音频数据流中间开始。这种格式常用在磁盘文件中。
- ADTS(Audio Data Transport Stream):这种格式的特征是每一帧都有一个同步字,所以可以在音频流的任何位置开始解码。它类似于数据流格式。
ADTS格式
- ADTS由7/9字节组成
- Audio Object Types(E所表示的含义)
- 1:AAC MAIN
- 2:AAC LC
- …
- 5:SBR
- …
- 29:PS
- …
- Sampling Frequency Index
- 0:96000 Hz
- 1:88200 Hz
- 2:64000 Hz
- 3:48000
- 4:44100
- 5:32000
- 6:24000
- 7:22050
- 8:16000
- 9:12000
- 10:11025
- 11:8000
- 12:7350
- 13:Reserved
- 14:Reserved
- 15:frequency is written explictly
通过ffmpeg生成AAC数据
./ffmpeg -i testvideo/Forrest_Gump_IMAX.mp4 -vn -c:a libfdk_aac -ar 44100 -channels 2 -profile:a aac_he_v2 testvideo/Forrest_Gump_IMAX.aac
- 可以看到不同编码规格压缩后的文件大小
- AAC LC:(Low Complexity)大小为490KB
- AAC HE V1:大小为246KB
- AAC HE V2:大小为185KB
参考资料
【1】雷神博客
【2】ffmpeg官方文档
【3】李超:音视频基础+ffmpeg原理