批量调整MP3音频的音量并且保存MP3元数据

查看 77|回复 8
作者:nhjjgjjg   
[Python] 纯文本查看 复制代码import os
from mutagen.id3 import APIC, ID3
from mutagen.mp3 import MP3
from pydub import AudioSegment
input_dir = "E:\Music" # 输入文件夹路径
output_dir = "E:\Music_new" # 输出文件夹路径
target_lufs = -16  # 目标响度值
# 创建输出目录
os.makedirs(output_dir, exist_ok=True)
for file in os.listdir(input_dir):
    if file.lower().endswith(".mp3"):
        input_path = os.path.join(input_dir, file)
        output_path = os.path.join(output_dir, file)
        try:
            # 读取原始元数据
            audio = MP3(input_path, ID3=ID3)
            id3_data = ID3(input_path)
            # 获取所有元数据标签
            tags = {}
            for frame in id3_data.values():
                if frame.FrameID in ["TIT2", "TPE1", "TALB", "TCON", "TRCK", "TDRC"]:
                    tags[frame.FrameID] = str(frame)
                elif frame.FrameID == "APIC":
                    tags["APIC"] = frame
            # 处理音频
            sound = AudioSegment.from_mp3(input_path)
            gain = target_lufs - sound.dBFS
            normalized = sound.apply_gain(gain)
            # 导出音频(临时文件)
            temp_output = output_path + ".temp.mp3"
            normalized.export(temp_output, format="mp3", bitrate="192k")
            # 将元数据复制到新文件
            new_audio = MP3(temp_output, ID3=ID3)
            new_audio.delete()  # 删除可能存在的空标签
            # 添加原始ID3标签
            for frame_id, value in tags.items():
                if frame_id == "APIC" and isinstance(value, APIC):
                    # 添加封面图片
                    new_audio.tags.add(value)
                elif frame_id in ["TIT2", "TPE1", "TALB", "TCON", "TRCK", "TDRC"]:
                    # 添加文本标签
                    frame_class = globals()[frame_id]
                    new_audio.tags.add(frame_class(encoding=3, text=value))
            # 保存元数据
            new_audio.save()
            # 重命名文件(移除临时后缀)
            os.rename(temp_output, output_path)
            print(f"成功处理: {file}")
        except Exception as e:
            print(f"处理 {file} 时出错: {str(e)}")
            # 如果出错,删除临时文件
            if os.path.exists(temp_output):
                os.remove(temp_output)
因为下载的本地音乐用foobar2000播放时音量不同,通过AI生成了可以调整音量的代码
需要安装以下依赖
[Plain Text] 纯文本查看 复制代码dependencies = [
    "audioop-lts>=0.2.2",
    "ffmpeg-python>=0.2.0",
    "mutagen>=1.47.0",
    "pydub>=0.25.1",
]

数据, 音量

李佑辰   

可以 可以要是有打包好的exe就更好了。
rjyq168   

请问代码怎么用?
nhjjgjjg
OP
  


rjyq168 发表于 2025-8-18 13:24
请问代码怎么用?

首先要安装python,并且安装依赖,创建.py文件,把代码复制进去运行,我是用的uv创建项目
Stamatis   

有打包好的吗?楼主。。。。exe文件的。
fq7944   

依赖全部安装好了~但是还是运行不起来啊?请问这个怎么用啊楼主??
nhjjgjjg
OP
  


fq7944 发表于 2025-8-28 15:27
依赖全部安装好了~但是还是运行不起来啊?请问这个怎么用啊楼主??

输入文件夹路径和输出文件夹路径要改成你自己的
fq7944   


nhjjgjjg 发表于 2025-8-28 18:41
输入文件夹路径和输出文件夹路径要改成你自己的

我已经在E盘新建了Music文件夹和Music_new文件夹了啊
徐州鑫匠   

刚 百度了一下  可以用  mp3gain  这个软件来批量调整音量大小
您需要登录后才可以回帖 登录 | 立即注册

返回顶部