aac(Advanced Audio Coding (AAC) encoder)

发布时间:2026/6/26 9:53:59
aac(Advanced Audio Coding (AAC) encoder) 不显示指定时默认每秒收集128个千比特数据个数据也意味着1秒钟播放的音频的数据量是128个千比特。8bit1byte1024byte1kb所以128千比特的数据量是128*1000/8/1024156.25kb也就是使用128kbps采集一秒钟的生意数据就产生156.25kb数据。这个128kbps是怎么算出来的它是由采样率*采样深度*声道数量。采样率一秒钟采集声音样本的次数比如4400hz表示1秒钟采集44000次声音数据也就是生成44000个bit单位的数据采样深度每次采样的样本所保存的声音特点数据比如采样深度10表示一次采样保留10bit的声音特点数据声道同一时间采集声音来源的通道个数比如2声道就是同一时间是录入两个不同的声音样本。那最终比特率就是4400*10*2880,00bit/s 就是88kbps。-q 设置动态码率的质量例如ffmpeg -i input.wav -c:a aac -q:a 2 output.m4a #-q:a 数值设定质量等级。数值范围通常为 0.1 到 10取决于编码器实现数值越低音质越好文件越大数值越高压缩率越高文件越小。-cutoff 设置声音频率的上限。超过这个上限的声音就会被舍弃。声音的频率是说一秒钟声音在传播介质通常就是空气中震荡的次数比如声音频率1000hz表示1秒钟声音在空气中震荡1000次。频率越低声音越沉。人耳的听觉范围是 20 Hz ~ 20,000 Hz的声音。使用例子比如# 保留约 20kHz 以下的所有频率人耳听不到的高频声音就舍弃了ffmpeg -i music.wav -c:a libfdk_aac -b:a 256k -cutoff 20000 music.m4a-aac_coder 设置编码时使用的编码算法它有三个算法1.‘twoloop’ 它会先遍历一遍声音数据来寻找一个优化值然后第二次循环使用这个优化值来处理声音可以达到降噪的目的。2.‘fast’是twoloop的简化版它是直接给出一个优化值不会根据具体的声音数据去找这个优化值它在64kbps的比特率下效果不好但是在192kbps的比特率下效果跟twoloop的效果相近。它因为少了寻找优化值的步骤所以编码速度要比twoloop快在直播监控时可以指定这个参数达到提高编码效率的目的减少延迟。3、‘anmr’。-aac_ms 转换立体声它的全称为 Mid/Side Stereo Coding中/侧立体声编码默认值auto自动根据条件启动或不启动enable​强制启用。disable完全禁用。它开启后可以减少编码后的数据大小可以把左声道右声道两个声道的数据转换为中立声音Mid和侧独立声音数据Side。Mid的算法是左声道数据右声道数据/2Side的计算是左声道数据-右声道数据/2。虽然还是会用两个通道但因为左右声道的中低频声音数据相近那么Side的数据两边一减很多都是接近或等于0然后编码器就可以压缩这些接近或等于0的数据用更少的编码来表示Side的数据就可以达到了减少数据量的目的。例子# 使用默认的自动模式推荐ffmpeg -i input.wav -c:a aac -aac_ms auto output.m4a# 设置aac编码以48kbps编码一秒钟声音的数据量是48*1000bit强制开启 M/S 以在低码率下保立体声ffmpeg -i input.wav -c:a aac -b:a 48k -aac_ms enable output.m4a-aac_is丢弃立体声模拟声源所在物理位置的信息这个位置信息并不是真实的物理位置而是通过一些算法模拟的位置信息比如模拟出人左耳听到的声音效果就是左声道。那它本来可以听出声音可能出现在左耳的感觉但使用了这个之后就区分不了感觉是左耳听到的还是右耳听到的了。这样达到大大的减少编码后的数据量的作用。使用例子# 使用默认的自动模式推荐ffmpeg -i input.wav -c:a aac -aac_is auto output.m4a# 强制开启仅在“只要能出声就行”的低码率场景使用ffmpeg -i input.wav -c:a aac -b:a 32k -aac_is enable output.m4a-aac_pns它是FFmpeg 中 AAC 编码器的感知噪声替换Perceptual Noise Substitution开关。它针对的是人耳听不到的高频声音它在编码时把这个高频声音打个标记并去掉这个被标记的数据段原始的数据但又要符合编码规则它用AAC编码规则支持的指令去替代这段被删除的数据然后直接保存到输出文件里。在使用能播放AAC编码的音频软件时播放这个输出文件时在其播放过程就会读取到这些标记并合成原来被舍去的高频声音的数据。例子ffmpeg -i input.wav -c:a aac -aac_pns 1 output.m4a# 默认开启 PNS无需显式指定ffmpeg -i input.wav -c:a aac output.m4a# 显式禁用 PNS通常仅用于调试ffmpeg -i input.wav -c:a aac -aac_pns 0 output.m4a-aac_tns它的作用是将噪声从“无声或弱声”的时间段“挤”到声音大的爆发的时间段人耳听到声响大的声音就听不到那些声音小的噪声了。它的原理是把声音的数据根据20ms时间分成一段段的在每一段数据如果发现这段数据前半段是“沙沙”的小的噪音后半段是很大的声音数据这个时候这个参数就会把前半段的噪声数据推到后半段。这个噪音数据还是存在是会播放的只不过就被大的声音覆盖掉了人耳就听不清噪音了只能听到大的声音。如果这个片段里没有声音大声音都很小效果就不好默认是自动模式根据声音特点来自动决定按这个原理编码那些数据段。例子# 默认开启 TNS标准用法ffmpeg -i input.wav -c:a aac output.m4a# 显式关闭 TNS通常不建议ffmpeg -i input.wav -c:a aac -aac_tns 0 output.m4a-aac_ltp它的作用是在全段的每个20ms音频数据里用指令来替代这所有片段中有相似声音波形的数据。在解码时就像aac_pns 一样的方法去解码。只不过解码的指令有区别。-profile它的作用是限制使用那些优化编码的参数比如-aac_pns 、-aac_tns、-aac_ltp。它有三个可选参数1.‘’aac_low’指定了这个就可以使用TNS PNS但就不能使用-aac_ltp编码工具。2.‘aac_ltp’允许使用aac_ltp编码工具。3.‘mpeg2_aac_low’。例子