本文目录导读:

- 使用 FFmpeg(最通用)
- 使用 mutagen(Python库)
- 使用 eyed3(Python库,专门用于MP3)
- 根据文件名自动设置元数据
- 使用命令行工具 music_tag
- 批量格式转换并保留元数据
- 安装依赖
- 实用示例:交互式批量修改
使用 FFmpeg(最通用)
批量修改元数据脚本
#!/bin/bash
# 批量修改MP3元数据
for file in *.mp3; do
ffmpeg -i "$file" \
-metadata title="新标题" \
-metadata artist="新艺术家" \
-metadata album="新专辑" \
-codec copy \
"${file%.*}_modified.mp3"
done
Python脚本使用FFmpeg
import os
import subprocess
def batch_modify_metadata():
metadata = {
'title': '自定义标题',
'artist': '自定义艺术家',
'album': '自定义专辑',
'year': '2024'
}
for file in os.listdir('.'):
if file.endswith(('.mp3', '.flac', '.m4a')):
cmd = ['ffmpeg', '-i', file]
for key, value in metadata.items():
cmd.extend(['-metadata', f'{key}={value}'])
cmd.extend(['-codec', 'copy', f'modified_{file}'])
subprocess.run(cmd)
使用 mutagen(Python库)
from mutagen.easyid3 import EasyID3
from mutagen.mp3 import MP3
import os
def batch_modify_mp3_metadata(directory):
for filename in os.listdir(directory):
if filename.endswith('.mp3'):
filepath = os.path.join(directory, filename)
try:
audio = EasyID3(filepath)
except:
audio = MP3(filepath)
audio.add_tags()
# 修改元数据
audio['title'] = f'新标题_{filename}'
audio['artist'] = '统一艺术家'
audio['album'] = '精选集'
audio['tracknumber'] = '1'
audio.save()
print(f'已修改: {filename}')
使用 eyed3(Python库,专门用于MP3)
import eyed3
import os
def batch_eyed3_metadata():
for file in os.listdir('.'):
if file.endswith('.mp3'):
audiofile = eyed3.load(file)
if audiofile.tag is None:
audiofile.initTag()
audiofile.tag.title = "新标题"
audiofile.tag.artist = "新艺术家"
audiofile.tag.album = "新专辑"
audiofile.tag.album_artist = "专辑艺术家"
audiofile.tag.genre = "流行"
audiofile.tag.save()
根据文件名自动设置元数据
import re
import os
import eyed3
def auto_metadata_from_filename():
pattern = r'(\d+)[\s\-_]+(.+)\.mp3'
for file in os.listdir('.'):
match = re.match(pattern, file)
if match:
track_num, title = match.groups()
audiofile = eyed3.load(file)
if audiofile.tag is None:
audiofile.initTag()
audiofile.tag.title = title.strip()
audiofile.tag.track_num = int(track_num)
audiofile.tag.save()
# 批量添加专辑封面
def add_album_art():
cover_image = open('cover.jpg', 'rb').read()
for file in os.listdir('.'):
if file.endswith('.mp3'):
audiofile = eyed3.load(file)
audiofile.tag.images.set(3, cover_image, 'image/jpeg')
audiofile.tag.save()
使用命令行工具 music_tag
# 安装
pip install music-tag
# Python脚本
from music_tag import load_file
import os
def batch_music_tag():
for file in os.listdir('.'):
if file.endswith('.mp3'):
audio = load_file(file)
audio['title'] = '新标题'
audio['artist'] = '新艺术家'
audio['album'] = '新专辑'
audio['year'] = 2024
audio.save()
批量格式转换并保留元数据
import os
import subprocess
def convert_and_preserve_metadata():
# 将FLAC转换为MP3并保留元数据
for file in os.listdir('.'):
if file.endswith('.flac'):
output = file.replace('.flac', '.mp3')
subprocess.run([
'ffmpeg', '-i', file,
'-codec:a', 'libmp3lame',
'-qscale:a', '2',
'-map_metadata', '0',
output
])
安装依赖
# Ubuntu/Debian sudo apt-get install ffmpeg pip install mutagen eyed3 music-tag # macOS brew install ffmpeg pip3 install mutagen eyed3 music-tag # Windows # 下载ffmpeg并添加到PATH pip install mutagen eyed3 music-tag
实用示例:交互式批量修改
import os
import eyed3
def interactive_batch_modify():
# 获取用户输入
artist = input("输入艺术家名称: ")
album = input("输入专辑名称: ")
genre = input("输入流派: ")
count = 0
for file in os.listdir('.'):
if file.endswith('.mp3'):
try:
audiofile = eyed3.load(file)
if audiofile.tag is None:
audiofile.initTag()
audiofile.tag.artist = artist
audiofile.tag.album = album
audiofile.tag.genre = genre
audiofile.tag.save()
count += 1
print(f'✓ {file}')
except Exception as e:
print(f'✗ {file}: {e}')
print(f'完成!修改了 {count} 个文件')
选择哪个方法取决于你的具体需求:
- 快速简单:使用FFmpeg命令行
- 功能全面:使用eyed3或mutagen
- 格式转换:结合FFmpeg使用