mcpField
A
audio-normalizer

audio-normalizer

github.com/dkyazzentwatwa创意与媒体12459 次安装29 周前更新
代码仓库

关于 audio-normalizer

audio-normalizer 是用于调整单个或批量音频文件音量的 Python 工具。它支持峰值和 RMS 标准化、LUFS 匹配及余量控制,可用于播客、音乐和语音处理。

主要功能

  1. 01峰值与 RMS 标准化
  2. 02匹配 LUFS 目标
  3. 03批量处理文件
  4. 04保留原始格式
  5. 05可配置余量

适用场景

  1. 01统一播客各集音量
  2. 02匹配音乐播放列表的响度
  3. 03标准化语音录音音量
  4. 04视频混音前调整音频电平

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dkyazzentwatwa/chatgpt-skills --skill audio-normalizer

安装后在 Claude Code 中输入/audio-normalizer确认已加载。

附带文件scripts/audio_normalizer.pyscripts/requirements.txt

详细介绍

音频标准化

使用峰值或 RMS 标准化来调整音频音量,确保不同文件的响度一致。

用途

音量标准化适用于:

  • 确保播客各期音量一致
  • 平衡音乐播放列表音量
  • 标准化语音录音
  • 满足广播响度规范

功能

  • 峰值标准化:将音频标准化至最大峰值(dBFS)
  • RMS 标准化:将音频标准化至平均响度
  • 响度匹配:匹配 LUFS 目标值,以满足广播规范
  • 批量处理:将多个文件标准化至相同音量
  • 保留格式:保留原始音频格式
  • 余量控制:通过可配置的余量防止削波

快速开始

from audio_normalizer import AudioNormalizer

# Peak normalization to -1 dBFS
normalizer = AudioNormalizer()
normalizer.load('input.mp3')
normalizer.normalize_peak(target_dbfs=-1.0)
normalizer.save('normalized.mp3')

# RMS normalization for consistent average loudness
normalizer.normalize_rms(target_dbfs=-20.0)
normalizer.save('normalized_rms.mp3')

# Batch normalize all files to same level
normalizer.batch_normalize(
    input_files=['audio1.mp3', 'audio2.mp3'],
    output_dir='normalized/',
    method='rms',
    target_dbfs=-20.0
)

CLI 用法

# Peak normalization
python audio_normalizer.py input.mp3 --output normalized.mp3 --method peak --target -1.0

# RMS normalization
python audio_normalizer.py input.mp3 --output normalized.mp3 --method rms --target -20.0

# Batch normalize directory
python audio_normalizer.py *.mp3 --output-dir normalized/ --method rms --target -20.0

# Show current levels without normalizing
python audio_normalizer.py input.mp3 --analyze-only

API 参考

AudioNormalizer
class AudioNormalizer:
    def load(self, filepath: str) -> 'AudioNormalizer'
    def normalize_peak(self, target_dbfs: float = -1.0, headroom: float = 0.1) -> 'AudioNormalizer'
    def normalize_rms(self, target_dbfs: float = -20.0) -> 'AudioNormalizer'
    def analyze_levels(self) -> Dict[str, float]
    def save(self, output: str, format: str = None, bitrate: str = '192k') -> str
    def batch_normalize(self, input_files: List[str], output_dir: str,
                       method: str = 'rms', target_dbfs: float = -20.0) -> List[str]

标准化方法

峰值标准化
  • 缩放音频,使最高峰值达到目标音量
  • 保留动态范围
  • 适用于防止削波
  • 目标值:通常为 -1.0 至 -3.0 dBFS
RMS 标准化
  • 缩放音频,使平均音量达到目标值
  • 更适合匹配感知响度
  • 适用于播客和语音
  • 目标值:通常为 -20.0 至 -23.0 dBFS
LUFS 匹配
  • 相对于满刻度的综合响度单位
  • 广播标准(EBU R128、ITU BS.1770)
  • 目标值:-23 LUFS(广播)、-16 LUFS(流媒体)

最佳实践

播客:

normalizer.normalize_rms(target_dbfs=-19.0)  # Speech clarity

音乐:

normalizer.normalize_peak(target_dbfs=-1.0)  # Preserve dynamics

广播:

normalizer.normalize_rms(target_dbfs=-23.0)  # EBU R128 compliance

使用场景

  • 播客制作:确保各期音量一致
  • 音乐播放列表:连续播放时保持响度均匀
  • 有声书:标准化旁白音量
  • 会议录音:标准化不同发言者的音量
  • 视频制作:混音前匹配音频音量

限制

  • 不会应用动态压缩(请使用单独的压缩器)
  • 不会移除直流偏移(建议预处理)
  • 峰值标准化无法匹配感知响度
  • 无法修复已削波的音频(失真是永久性的)

评论

支持 Markdown