惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
人人都是产品经理
人人都是产品经理
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The GitHub Blog
The GitHub Blog
V
V2EX
Microsoft Security Blog
Microsoft Security Blog
V
Visual Studio Blog
A
About on SuperTechFans
博客园_首页
L
LangChain Blog
量子位
雷峰网
雷峰网
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Jina AI
Jina AI
月光博客
月光博客
阮一峰的网络日志
阮一峰的网络日志
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
M
MIT News - Artificial intelligence
N
Netflix TechBlog - Medium

博客园_首页

Plist 二进制格式 Milvus 和 PGVector,哪个更好? OpenClaw 已过时?在 VS Code 中运行 Hermes Agent! 第30篇文章:一个大三计科生的自白 Manim如何在数学公式中完美显示中文? Docker 部署 RocketMQ 5 并发编程核心概念辨析 C#事务处理最佳实践:别再让“主表存了、明细丢了”的破事发生 CLI 是什么?为什么大厂突然集体卷命令行? 【从0到1构建一个ClaudeAgent】协作-自主Agent UIImageView 设置图片不生效的原因排查 最小二乘问题详解20:无先验约束下的增量式SFM自由网平差 痞子衡嵌入式:大话双核i.MXRT1180之XIP应用里借助MU实现可靠Flash IAP的方法 AI Chat 封装, SemanticKerne.AiProvider.Unified 已发布 Windows下右键编辑js文件无法打开记事本——在注册表中使用环境变量 在后台服务中使用 Scoped 服务,为什么总是报错? H200 安装驱动并使用sglang启动模型 wireshark 抓包Trap上报告警内容 我用 AI 辅助开发了一系列小工具(2):图片压缩工具 [A Primer On MC and CC] 2.1 Memory Consistency 1 - 指令重排序和 SC 模型 Oracle数据库SCN推进技术详解与实践指南 玩转控件:封装个带图片的Label控件 Claude Code 4.7 真正该升级的不是模型,而是你的工作流 前端小白一句话,AI 帮我做了个颜值拉满的桌面媒体播放器。当代码不再是门槛,一句话编程就是现实。 5. WorkBuddy: 小龙虾的灵魂三件套,让你的小龙虾不只是工具 SQLite 分片方案实战:三种分片策略的深度对比 告别简陋 UI!一款基于 Fluent Design 和基于 WinUI 的开源免费、现代化的 Avalonia UI 控件库 关于二进制排列组合枚举的总结 AI开发-python-LangGraph框架(3-27-LangGraph从零实现大模型智能决策工作流) ElasticSearch主分片和副本分片概念详解
fmpeg音频编码组件aac(Advanced Audio Coding (AAC) encoder)...
HelloLLLLL · 2026-05-05 · via 博客园_首页

aac(Advanced Audio Coding (AAC) encoder)

-b 设置比特率

  不显示指定时,默认每秒收集128个千比特数据个数据,也意味着1秒钟播放的音频的数据量是128个千比特。8bit=1byte,1024byte=1kb,所以128千比特的数据量是:128*1000/8/1024=156.25kb,也就是使用128kbps采集一秒钟的生意数据就产生156.25kb数据。这个128kbps是怎么算出来的,它是由:采样率*采样深度*声道数量。采样率:一秒钟采集声音样本的次数比如4400hz,表示1秒钟采集44000次声音数据,也就是生成44000个bit单位的数据;采样深度:每次采样的样本所保存的声音特点数据,比如采样深度:10,表示一次采样,保留10bit的声音特点数据;声道:同一时间,采集声音来源的通道个数,比如2声道,就是同一时间是录入两个不同的声音样本。那最终比特率就是:4400*10*2=880,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的算法是(左声道数据+右声道数据)/2;Side的计算是:(左声道数据-右声道数据)/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’。例子:

ffmpeg -i input.wav -c:a aac -profile:a aac_low -b:a 128k output.m4a