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",
]