Python MP3 归一化器和长度分割器实用工具开发指南
·
MP3 音频归一化处理
音频归一化通过调整音量峰值或响度至统一标准,常用 pydub 和 loudness-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")
依赖库安装与注意事项
- 必需库:
pydub、ffmpeg-normalize(或loudness-normalizer) - 安装 FFmpeg:
# Ubuntu/Debian sudo apt install ffmpeg # macOS brew install ffmpeg - 处理大文件时建议逐块读取,避免内存溢出。
更多推荐
所有评论(0)