同一条视频,两段 AI 旁白都没碰到红色峰值,接起来却一段像贴着耳朵说话,另一段像退到了房间后面。把后一段推高几格,齿音又开始刺耳。问题不一定出在配音模型:峰值高度和整段听起来有多响,本来就不是一回事。
下面用 FFmpeg 的 loudnorm 给一份旁白 WAV 做两遍响度处理,再量一次导出的文件。适合做课程、解说、产品视频的剪辑与运营人员。AI 负责生成或修改台词,响度交给可检查的音频工具;不需要把私密录音上传给聊天机器人,也不把音量校准包装成“修复了所有音质问题”。
把交付目标写成数字,但别照抄平台传言
本例采用整段综合响度 -16 LUFS、真峰值上限 -1.5 dBTP、响度范围目标 11 LU,仅作为演示设置,不是所有视频平台的统一规范。客户或发布方若有明确要求,按要求替换 I、TP、LRA,三次命令保持同一组目标。LUFS 反映响度,dBTP 描述真峰值;两者不能当作同一种音量刻度。
从 ElevenLabs 等配音工具导出获准使用的旁白,保留原件并复制为练习目录里的 voice.wav。尽量处理已经定稿、剪好停顿的整段人声,不要给每个词各做一次归一化。更换语速、剪掉大段静音、换音轨或重新生成台词后,旧测量值就不能继续沿用。
这次只处理旁白,不把配乐一起混进去。项目混音完成后还要复查整体响度;单独的人声达标,不等于音乐和音效加上去也达标。若素材已经削波破音,loudnorm 不能凭空还原丢失的波形,也不是降噪、去齿音或重新配音的替代品。
让本机认出 loudnorm,再处理原件副本
从FFmpeg 官方下载页进入与你系统匹配的来源。FFmpeg 官方提供源码,Windows 可执行包链接指向其他构建方;不要把来历不明的安装包说成官方签名程序,也不要因为报安全警告就盲目关闭防护。解压后确认 ffmpeg 命令可用;若只放在当前 bin 目录,PowerShell 可把下面命令开头改成 .\ffmpeg.exe。
ffmpeg -version
ffmpeg -hide_banner -h filter=loudnorm
帮助输出中应有 loudnorm 及 measured_I、measured_TP、measured_LRA、measured_thresh 等选项。记录实际 FFmpeg 版本。当前编辑环境没有可用的 FFmpeg,本文只核对官方文档、输出字段源码与命令结构,没有处理真实录音或作试听比较;下方数值例子是教学数据,不是实测报告。
第一遍只测量,不生成“改善后”的文件
在 voice.wav 所在目录运行:
ffmpeg -hide_banner -nostdin -i "voice.wav" -map 0:a:0 -vn -af "loudnorm=I=-16:TP=-1.5:LRA=11:print_format=json" -f null -
-map 0:a:0 明确选取第一个音频流,-vn 排除视频;-f null - 把处理输出丢弃,不写一份成品。FFmpeg 会输出进度和日志,末尾的 loudnorm JSON 才是本次要保存的测量材料。首遍虽然不保存音频,滤镜仍会运行;我们取的是 input 开头的原始输入指标,不把 output 指标当作下一遍的原件测量值。
为了看清对应关系,假设报告中的五个字段如下。实际操作必须替换成你自己的结果,保留负号和小数,不要照抄这些数字,也不要把带有其他日志的整屏内容直接当作 JSON 文件解析。
| 首遍报告字段 | 教学值 | 第二遍参数 |
|---|---|---|
| input_i | -24.00 | measured_I |
| input_tp | -10.00 | measured_TP |
| input_lra | 2.50 | measured_LRA |
| input_thresh | -34.00 | measured_thresh |
| target_offset | 0.00 | offset |
若整段是静音,或者指标出现 -inf 等非有限值,先检查选错轨、空文件和声音是否实际存在,不要把它硬改成 -99 以便命令继续。读到数字不代表素材可用,极短片段的测量也不应当作长旁白的代表。
第二遍回填测量值,另存一份 WAV
下面命令只对应上表教学值。把五处 measured/offset 数字换成同一份 voice.wav 首遍得到的值后再运行:
ffmpeg -hide_banner -nostdin -n -i "voice.wav" -map 0:a:0 -vn -af "loudnorm=I=-16:TP=-1.5:LRA=11:measured_I=-24:measured_TP=-10:measured_LRA=2.5:measured_thresh=-34:offset=0:linear=true:print_format=json" -ar 48000 -c:a pcm_s24le "voice_norm.wav"
-n 遇到已有 voice_norm.wav 会拒绝覆盖。若你要保留上一次结果,就换一个新输出名,而不是直接删掉原件。这里输出 48 kHz、24 位 PCM WAV,目的是得到一份供剪辑和复查的中间文件;没有转换到 MP3,也不宣称 WAV 能让原来的有损音频恢复细节。
linear=true 只是请求线性归一化,不保证最后一定使用线性模式。按官方 loudnorm 文档,目标 LRA 不能低于原素材的 LRA,提升综合响度也不能使真峰值超过目标;不满足条件会退回 dynamic。查看 normalization_type,并听清爆破音、尾音和呼吸是否被明显改变,不要只看目标数字。
教程保持原声道数量,不在两遍之间加 -ac 改声道。单声道准备按双单声道方式播放时,应先明确交付与测量约定,再研究 dual_mono,且两遍设置一致。动态模式内部可能上采样到 192 kHz,因此第二遍显式用 -ar 48000 指定交付采样率;这也提醒我们,必须再量实际导出的文件。
复测看新文件的 input,不看旧报告的 output
ffmpeg -hide_banner -nostdin -i "voice_norm.wav" -map 0:a:0 -vn -af "loudnorm=I=-16:TP=-1.5:LRA=11:print_format=json" -f null -
这次的 input_i 和 input_tp 才描述 voice_norm.wav 的实测输入。若未接近约定目标,或真峰值超限,不要靠改报告数字“通过验收”;检查原件是否变动、回填是否串用了另一份文件的值、滤镜是否回退动态模式,以及采样率或后续编码是否改变了结果。听感与数值都要检查,loudnorm 不保证每种素材精确落在同一点。
在剪辑软件中保留原版、处理版两条轨,用相同播放设备听相同位置,切换时留意语句衔接、齿音、爆破音和背景噪声。为了比较音质,可临时匹配监听音量;最终交付仍以项目规范下的响度和整段混音为准。若只是想省掉命令行,也可评估站内 Auphonic,但需另看当前额度、上传权限和处理选项,不假设云服务无限免费。
AI 能帮忙读报告,不能替你编出“合格”
把不含文件名、客户名和音频内容的数值摘录交给 Claude 等助手,可以请它核对回填关系。完整日志可能含路径或文件元数据,不要直接复制;无需上传录音也能完成这项检查。
以下是教学旁白的首遍 loudnorm 五个字段、第二遍滤镜参数,以及导出 WAV 复测的 input_i/input_tp。请逐项核对映射、负号、目标是否一致和是否有非有限值;区分“参数可读”“达到目标”“听感可接受”。缺少复测或试听时标注未验证,不猜数字、不替换我的数值,不把 -16 LUFS 说成所有平台标准,也不要建议覆盖原件。
交付清单可以很短:原始旁白及授权依据、FFmpeg 版本、目标 I/TP/LRA、首遍五项值、实际处理模式、导出格式、最终复测与试听结论。记录仍需人工确认的段落。将这份记录和成品一起交接,接手的人才能判断是该重新测量、调整混音,还是回到配音脚本修改重音,而不是继续盲目推高音量。