本文是上面文章的摘要,只用于自己快速浏览.
目录
补充
一. AVPacket问题
//栈空间
AVPacket pack
//堆空间
AVPacket * p
二. speed
在终端进行重采样时,我们看到有个speed被打印出来,speed是什么?
speed = 音频时长 / 重采样耗时
三. 录音显示时间
//采集时间 = pcm数据大小 / 字节率
unsigned long long ms = 1000.0 * header.dataChunkDataSize / header.byteRate;
四. 样本
1.样本的排列
2.样本大小
样本大小:单声道的样本大小
样本帧大小:多声道的样本大小
3.planar的缓冲区结构
对比MP3
AAC(Advanced Audio Coding,译为:高级音频编码),是有损音频编码和文件格式。
AAC被设计为MP3格式的后继产品,通常在相同的比特率下可以获得比MP3更高的声音质量,是iPhone、iPod、iPad、iTunes的标准音频格式。
AAC相较于MP3的改进包含:
更多的采样率选择:8kHz ~ 96kHz,MP3为16kHz ~ 48kHz
更高的声道数上限:48个,MP3在MPEG-1模式下为最多双声道,MPEG-2模式下5.1声道
改进的压缩功能:以较小的文件大小提供更高的质量
改进的解码效率:需要较少的处理能力进行解码
……
规格
AAC是一个庞大家族,为了适应不同场合的需要,它有很多种规格可供选择。下面列举其中的9种规格(Profile):
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)
最早是基于MPEG-2标准,称为:MPEG-2 AAC。后来MPEG-4标准在原来基础上增加了一些新技术,称为:MPEG-4 AAC。
LC和HE
MPEG-4 AAC LC等价于:MPEG-2 AAC LC + PNS
MPEG-4 AAC HE v1等价于:MPEG-4 AAC LC + SBR
MPEG-4 AAC HE v2等价于:MPEG-4 AAC HE v1 + PS
一. PNS(Perceptual Noise Substitution)译为:感知噪声替代
PNS可以提高AAC的编码效率
二. SBR(Spectral Band Replication)译为:频段复制
是一种增强的压缩技术
可以将高频信号存储在少量的SBR data中
解码器可以根据SBR data恢复出高频信号
自己理解:假如一段音频的采样率是40000HZ,即一秒钟采样40000次,使用SBR技术压缩时我们可以丢掉一半的采样数据,让其采样率变为20000HZ,其中丢掉部分数据与保留部分数据的差异保存在SBR data中,解压时通过SBR data恢复另一半数据.
三. PS(Parametric Stereo)译为:参数立体声
是一种有损的音频压缩算法,可以进一步提高压缩率
可以将左右声道信号组合成单声道信号,声道之间的差异信息存储到少量的PS data中(大概占2 ~ 3kbps)
解码器可以根据PS data中恢复出立体声信号
编解码器
如果想对PCM数据进行AAC编码压缩,那么就要用到AAC编码器(encoder)。
如果想将AAC编码后的数据解压出PCM数据,那么就要用到AAC解码器(decoder)。
一. Nero AAC
停止开发维护
二. FFmpeg AAC
FFmpeg官方内置的AAC编解码器,在libavcodec库中
支持LC规格,编解码器名字叫做aac,在开发过程中通过这个名字找到编解码器
三. FAAC(Freeware Advanced Audio Coder)
可以集成到FFmpeg的libavcodec中,
支持LC规格,名字叫做libfaac
从2016年开始,FFmpeg已经移除了对FAAC的支持
四. Fraunhofer FDK AAC
可以集成到FFmpeg的libavcodec中,目前质量最高的AAC编解码器
支持LC/HE规格,名字叫做libfdk_aac
编码质量排名:Fraunhofer FDK AAC > FFmpeg AAC > FAAC。
FDK AAC
可以通过命令行查看FFmpeg目前集成的AAC编解码器。
# windows
ffmpeg -codecs | findstr aac
# mac
ffmpeg -codecs | grep aac
需要自己手动编译FFmpeg源码,将libfdk_aac集成到FFmpeg中。
行者常至,为者常成!