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

是否有方法对文件夹内的音频文件进行批量归一化处理?

音频批量归一化到-14dB解决方案

以下提供两种可直接修改使用的脚本,均支持批量遍历文件夹内音频,无需逐个手动处理。

Python 实现方案

依赖安装

  • 系统层面先安装FFmpeg(对应你使用的操作系统版本安装即可)
  • 安装Python依赖包:pip install pydub

可直接使用的脚本

import os
from pydub import AudioSegment
from pydub.utils import mediainfo

# 配置参数,自行修改对应路径
TARGET_LUFS = -14
SUPPORTED_FORMATS = ('.mp3', '.wav', '.flac', '.m4a', '.aac')
INPUT_FOLDER = "替换为你的音频输入文件夹路径"
OUTPUT_FOLDER = "替换为归一化后音频的输出文件夹路径"

# 自动创建输出文件夹
os.makedirs(OUTPUT_FOLDER, exist_ok=True)

for filename in os.listdir(INPUT_FOLDER):
    if not filename.lower().endswith(SUPPORTED_FORMATS):
        continue
    input_path = os.path.join(INPUT_FOLDER, filename)
    output_path = os.path.join(OUTPUT_FOLDER, filename)
    
    ext = os.path.splitext(filename)[1][1:].lower()
    # 读取音频文件
    audio = AudioSegment.from_file(input_path, format=ext)
    # 计算当前音频响度
    current_lufs = float(mediainfo(input_path)['loudness'])
    # 计算需要调整的增益值
    gain_db = TARGET_LUFS - current_lufs
    # 应用增益完成归一化
    normalized_audio = audio.apply_gain(gain_db)
    # 导出处理后的文件
    normalized_audio.export(output_path, format=ext)
    print(f"已处理:{filename},增益调整{gain_db:.2f}dB")

如果需要更高精度的响度计算,可以额外安装pyloudnorm、numpy、soundfile库替换默认的mediainfo响度计算逻辑。


C# 实现方案

依赖安装

在NuGet包管理器中安装NAudio,如果需要处理MP3格式额外安装NAudio.Lame。

可直接使用的脚本

using System;
using System.IO;
using NAudio.Wave;
using NAudio.Lame;

namespace BatchAudioNormalizer
{
    class Program
    {
        const double TargetLufs = -14;
        static readonly string[] SupportedFormats = { ".mp3", ".wav", ".flac" };
        static void Main(string[] args)
        {
            // 自行修改对应路径
            string inputFolder = @"替换为你的音频输入文件夹路径";
            string outputFolder = @"替换为归一化后音频的输出文件夹路径";
            Directory.CreateDirectory(outputFolder);

            foreach (string file in Directory.GetFiles(inputFolder))
            {
                string ext = Path.GetExtension(file).ToLower();
                if (!Array.Exists(SupportedFormats, f => f == ext)) continue;
                
                Console.WriteLine($"正在处理:{Path.GetFileName(file)}");
                using (var reader = new AudioFileReader(file))
                {
                    long sampleCount = reader.Length / (reader.WaveFormat.BitsPerSample / 8);
                    float[] buffer = new float[sampleCount];
                    reader.Read(buffer, 0, (int)sampleCount);
                    
                    // 计算RMS并转换为近似LUFS
                    double sum = 0;
                    foreach (float sample in buffer)
                    {
                        sum += sample * sample;
                    }
                    double rms = Math.Sqrt(sum / sampleCount);
                    double currentLufs = 20 * Math.Log10(rms) - 0.691;
                    double gain = Math.Pow(10, (TargetLufs - currentLufs) / 20);
                    
                    // 应用增益+削波保护
                    for (int i = 0; i < buffer.Length; i++)
                    {
                        buffer[i] = (float)(buffer[i] * gain);
                        buffer[i] = Math.Clamp(buffer[i], -1f, 1f);
                    }
                    
                    // 导出文件
                    string outputPath = Path.Combine(outputFolder, Path.GetFileName(file));
                    if (ext == ".wav")
                    {
                        using var writer = new WaveFileWriter(outputPath, reader.WaveFormat);
                        writer.WriteSamples(buffer, 0, buffer.Length);
                    }
                    else if (ext == ".mp3")
                    {
                        using var writer = new LameMP3FileWriter(outputPath, reader.WaveFormat, 192);
                        writer.WriteSamples(buffer, 0, buffer.Length);
                    }
                }
                Console.WriteLine($"处理完成:{Path.GetFileName(file)}");
            }
        }
    }
}

如果需要更高精度的LUFS计算,可以引入专业的音频响度计算第三方库替换上方的近似转换逻辑。


注意事项

  • 所有脚本默认不修改原文件,处理后的文件统一输出到指定的输出文件夹,仍建议你提前备份原文件避免意外损失
  • 若要支持更多音频格式,可自行扩展SUPPORTED_FORMATS列表,同时安装对应格式的解码依赖即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:09:04