MP3 音频归一化处理

音频归一化通过调整音量峰值或响度至统一标准,常用 pydubloudness-normalizer 库实现。以下为基于峰值归一化的代码示例:

from pydub import AudioSegment
from pydub.effects import normalize

# 加载音频文件
audio = AudioSegment.from_mp3("input.mp3")

# 峰值归一化(默认-0.1 dBFS)
normalized_audio = normalize(audio)

# 导出处理后的文件
normalized_audio.export("normalized_output.mp3", format="mp3")

若需基于响度(LUFS)归一化,需安装 ffmpeg-normalize

pip install ffmpeg-normalize

使用示例:

from ffmpeg_normalize import FFmpegNormalize

normalizer = FFmpegNormalize(loudness_norm="EBU_R128", target_level=-23)
normalizer.add_media_file("input.mp3", "normalized_output.mp3")
normalizer.run_normalization()

MP3 文件按长度分割

基于 pydub 实现按固定时长分割音频,以下代码将文件分割为每段30分钟:

from pydub import AudioSegment

audio = AudioSegment.from_mp3("input.mp3")
segment_length = 30 * 60 * 1000  # 30分钟(毫秒)

for i, start_time in enumerate(range(0, len(audio), segment_length)):
    end_time = min(start_time + segment_length, len(audio))
    segment = audio[start_time:end_time]
    segment.export(f"segment_{i+1}.mp3", format="mp3")

若需按静音检测分割,可使用 pydub.silence 模块:

from pydub.silence import split_on_silence

segments = split_on_silence(
    audio,
    min_silence_len=500,  # 静音最短时长(毫秒)
    silence_thresh=-40    # 静音阈值(dBFS)
)

for idx, segment in enumerate(segments):
    segment.export(f"silence_segment_{idx}.mp3", format="mp3")

依赖库安装与注意事项

  • 必需库:pydubffmpeg-normalize(或 loudness-normalizer
  • 安装 FFmpeg:
    # Ubuntu/Debian
    sudo apt install ffmpeg
    
    # macOS
    brew install ffmpeg
    

  • 处理大文件时建议逐块读取,避免内存溢出。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐