You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python为音频文件设置全程固定音量,解决音量不均问题?

双说话人音量差异问题解决方案

常规pydub normalize功能基于整段音频的峰值调整增益,会被高音量的1号说话人片段限制增益上限,无法单独抬高低音量的2号说话人内容,这是此前方案无效的核心原因。

方案1:说话人分离后单独归一化(效果最优)

  • 第一步使用预训练的说话人分离工具将音频中1号、2号说话人的内容按时间轴拆分,可选工具包括pyannote.audio预训练模型、SpeechBrain分离模块,或轻量工具whisperx
  • 第二步对拆分后的1号说话人音频做峰值限制,统一调整到-16LUFS的标准对话响度
  • 第三步对拆分后的2号说话人音频做响度归一化,拉高到和1号说话人相同的响度水平
  • 最后将两段处理后的音频按原始时间轴对齐合并即可

方案2:动态范围压缩快速处理(无需分离说话人)

如果不需要最优效果,可以直接用音频压缩器压减动态范围,同时拉高低音量片段增益,pydub调用ffmpeg滤镜的示例代码如下:

from pydub import AudioSegment

# 读取原始音频
raw_audio = AudioSegment.from_file("your_audio_file.wav")
# 调用ffmpeg的acompressor滤镜,阈值-20dB,压缩比4:1,压低高音量峰值
compressed_audio = raw_audio.filter(
    "acompressor",
    threshold=-20,
    ratio=4,
    attack=10,
    release=200
)
# 对压缩后的音频做整体响度归一化
final_audio = compressed_audio.normalize()
# 导出处理后文件
final_audio.export("processed_audio.wav", format="wav")

如果2号说话人音量仍然偏低,可以在压缩后额外增加增益,将平均响度低于-30dB的非静音片段单独提升10-15dB,注意不要过度拉高背景噪声。

方案3:自定义分段增益调整

你也可以自己实现小片段扫描逻辑,针对性调整低音量片段增益:

  • 将整段音频按100ms为单位拆分为多个小片段
  • 计算每个小片段的平均响度,筛选出响度低于-30dB的非静音片段(对应2号说话人内容)
  • 对筛选出的片段计算需要提升的增益,拉高到和整段音频平均响度一致的水平
  • 增益调整时对片段首尾加5ms的淡入淡出,避免出现爆音问题

内容的提问来源于stack exchange,提问作者Nutan Haq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:54:03