本文目录导读:

- 使用 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使用
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播