【ffmpeg】音频编码原理

【ffmpeg】音频采集

  • 前言
  • 音频压缩技术
    • 有损压缩
    • 无损压缩
  • 几种常见编码器的比较
  • AAC编码器介绍
  • ADTS格式
  • 通过ffmpeg生成AAC数据
  • 参考资料

个人简介

个人主页:一二三o-0-O的博客
技术方向:C/C++客户端资深工程师(直播+音视频剪辑)
‍作者简介:数据结构算法与音视频领域创作者
系列专栏:ffmpeg入门
专栏目标:务实的掌握FFmpeg相关专业知识
如果对您有帮助的话,欢迎点赞收藏,关注不迷路

前言

如果是刚刚开始学习音视频的伙伴,可以先看看音视频基 础专栏系列的内容,掌握音视频相关的一些基础理论

音视频基础专栏系列

(一)【音视频基础】音频基础理论
(二)【音视频基础】视频基础理论
(三)【音视频基础】封装格式与编码数据

如果觉得理论学习枯燥的伙伴,可以先通过以下四篇文章使用ffmpeg实现一个播放器,可以获得些许成就感,为持续在音视频领域扎根打好兴趣基础。

ffmpeg专栏系列

(一)【ffmpeg】ffmpeg命令工具的使用
(二)【ffmpeg】视频解码器
(三)【ffmpeg】SDL视频显示
(四)【ffmpeg】ffmpeg+SDL实现播放器

本节主要阐述音频编码的原理

音频压缩技术

  • 音频压缩技术是在保证信号在听觉方面不产生失真的前提下,对音频数据信号进行尽可能大的压缩。压缩的主要方法是去除采集到的音频冗余信息。
  • 冗余信息包括人耳听觉范围外的音频信号以及被遮蔽掉的音频信号。
  • 音频压缩分为两种
    • 有损压缩:消除冗余信息后,无法还原出原声。
    • 无损压缩:消除冗余信息后仍能够还原出远程。

有损压缩

  • 信号的遮蔽可以分为频域遮蔽时域遮蔽
    • 频域遮蔽:不同频率的声音产生遮蔽效应
      【ffmpeg】音频编码原理_第1张图片

    • 时域遮蔽:声音强度高的在前后时间内将声音强度低的进行遮蔽
      【ffmpeg】音频编码原理_第2张图片

无损压缩

  • 熵编码(即无损编码),其基本原理是将用短的编码替代高频的词汇、句子,用长的句代表低频词。熵编码常用的三种方法:
    • 哈夫曼编码:使用一串二进制数代替一串特别长的字符。特点是:频率越高的编码越少,频率越低的编码越长
      【ffmpeg】音频编码原理_第3张图片

    • 算数编码:通过二进制小数进行编码

    • 香农编码:算数编码是在香农编码基础上改进而来

  • 音频编码过程:采集到原始的音频数据,经过时域转频域变换(将一段长时间的数据交给频域转换器),并且通过心理声学模型(滤掉人听觉范围以外的频率+遮蔽),将这两个数据汇总之后进行量化编码(有损、无损编码),编码后得到的比特流的数据(压缩完成后的数据)就可以用在网络的传输上。流程图如下图所示:
    【ffmpeg】音频编码原理_第4张图片

几种常见编码器的比较

  • 常见的音频编码器包括OPUS、AAC、Ogg、Speex、iLBC、AMR、G.711等。其中AAC在直播系统中应用的比较广泛OPUS是最新的音频编码器,WebRTC默认使用OPUS;固话一般用的G.711。
    • OPUS:目前较新的音频编解码器,WebRTC默认使用OPUS;延迟小,压缩率高。应用在在线教育,视频会议。
    • AAC:在直播系统中应用比较广泛的编解码器;(分软件和硬件)不适合实时性要求较高的场景。
    • Ogg:软件收费,应用比较少;
    • Speex:显著的特点是支持回音消除,是七八年前应用非常广泛的编解码器。
    • G.711:固话、电话使用的窄带音频编解码器,但是音损非常严重,不适合实时通信。
  • 编解码质量对比如下:
    【ffmpeg】音频编码原理_第5张图片
  • 音频编码码率对比
    【ffmpeg】音频编码原理_第6张图片

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)。其核心思想是双声道中的声音存在某种相似性,只需存储一个声道的全部信息,然后,花很少的字节用参数描述另一个声道和它不同的地方
    • 规格关系如下图:
      【ffmpeg】音频编码原理_第7张图片
  • AAC格式
    • ADIF(Audio Data Interchange Format):这种格式的特征是可以确定找到这个音频数据的开始,只能从头开始解码,不能在音频数据流中间开始。这种格式常用在磁盘文件中。
    • ADTS(Audio Data Transport Stream):这种格式的特征是每一帧都有一个同步字,所以可以在音频流的任何位置开始解码。它类似于数据流格式。

ADTS格式

  • ADTS由7/9字节组成
    【ffmpeg】音频编码原理_第8张图片
  • 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数据

  • 使用下列命令行生成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
【ffmpeg】音频编码原理_第9张图片

  • 可以看到不同编码规格压缩后的文件大小
    • AAC LC:(Low Complexity)大小为490KB
    • AAC HE V1:大小为246KB
    • AAC HE V2:大小为185KB
      在这里插入图片描述

参考资料

【1】雷神博客
【2】ffmpeg官方文档
【3】李超:音视频基础+ffmpeg原理

你可能感兴趣的:(#,FFmpeg入门,音视频,ffmpeg,音频编码,AAC,ADTS)