脚本如何批量转换音频元数据

wen 实用脚本 3

本文目录导读:

脚本如何批量转换音频元数据

  1. 使用 FFmpeg(最通用)
  2. 使用 mutagen(Python库)
  3. 使用 eyed3(Python库,专门用于MP3)
  4. 根据文件名自动设置元数据
  5. 使用命令行工具 music_tag
  6. 批量格式转换并保留元数据
  7. 安装依赖
  8. 实用示例:交互式批量修改

使用 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使用

抱歉,评论功能暂时关闭!