[python3]mp3のmetaタグのtitle属性でファイル名をリネームするスクリプトを書きました~

久しぶりにブログ更新した気がします。創作意欲が吹き飛んでしまいまして若干スランプ気味です…とりあえずPythonで遊ぶのは楽しいのでそのうち復活するかもしれません…w

2018/4/28更新

新たに以下の拡張子の音声ファイルに対応しました~。ネストしているファイル形式については本質的に同じものなので、リストの先頭の拡張子に変換します。

  • mp3
  • m4a
    • aac
    • mp4
  • ogg
  • flac
  • wma
    • asf
  • wmv
  • aiff
    • aif

moraとかでたまにデジタルミュージックのアルバム買ったりするんですけど、大体ファイル名がなんかの連番だったりしていちいち曲名にリネームするのがだるかったので作りました。
Pythonなら10行以下で書けるんですね~すごいね~

ダウンロード

ダウンロードはこちらからどうぞ。

ソース

※前提としてPython3.6のインストールと以下の外部モジュールが必要です。pipでインストールして下さい。


pip install mutagen

rename.py


from mutagen.easyid3 import EasyID3
from mutagen.easymp4 import EasyMP4
from mutagen.oggvorbis import OggVorbis
from mutagen.flac import FLAC
from mutagen.aiff import AIFF
from mutagen.id3 import ID3
from mutagen.asf import ASF
import os, mutagen

exts = (".mp3", ".aac", ".m4a", ".mp4", ".ogg", ".flac", ".aif", ".aiff", ".wmv", ".wma", ".asf",)
aac_like = (".aac", ".m4a", ".mp4",)
aiff_like = (".aiff", ".aif",)
asf_like = (".asf", ".wma",)
id3_tags = ("TIT2", "TPE1", "TALB",)
replace_char = ("|", " ", " ", "\\", "/", ":", "*", "?", "\"", ">", "<", ".",)

file_lists = [x for x in os.listdir(".") if os.path.splitext(x)[1] in exts]

def mp3_rename(name):
    try:
        os.rename(name, EasyID3(name)["title"][0] + ".mp3")
    except mutagen.MutagenError:
        pass
    
def mp4_rename(name):
    try:
        os.rename(name, EasyMP4(name)["title"][0] + ".m4a")
    except mutagen.MutagenError:
        pass
        
def ogg_rename(name):
    try:
        audio = OggVorbis(name)
        os.rename(name, audio["title"].pop() + ".ogg")
    except mutagen.MutagenError:
        pass
        
def flac_rename(name):
    try:
        audio = FLAC(name)
        os.rename(name, audio["title"].pop() + ".flac")
    except mutagen.MutagenError:
        pass
        
def wmv_rename(name):
    try:
        audio = ASF(name)
        os.rename(name, str(audio["Title"].pop()) + ".wmv")
    except mutagen.MutagenError:
        pass
        
def asf_rename(name):
    try:
        audio = ASF(name)
        os.rename(name, str(audio["Title"].pop()) + ".wma")
    except mutagen.MutagenError:
        pass
        
def aiff_rename(name):
    try:
        audio = mutagen.File(name)
        tags = [x for x in audio.keys() if x in id3_tags] 
        replace_name = str_replacer(str(audio[tags[0]]))
        os.rename(name, replace_name + ".aiff")
    except mutagen.MutagenError:
        pass
    except TypeError:
        print(f"{name}のrenameに失敗しました。")
        
def str_replacer(file_name):
    rep_char = ""
    for idx, c in enumerate(file_name):
        if idx == 0 and c == ".":
            # 先頭の文字が"."だと隠しファイルになるので無視します。
            pass
        else:
            if c in replace_char:
                rep_char += "_"
            else:
                rep_char += c
    return rep_char 
    
            
for file in file_lists:
    current_file_ext = os.path.splitext(file)[1]
    if current_file_ext == ".mp3":
        mp3_rename(file)
    elif current_file_ext == ".ogg":
        ogg_rename(file)
    elif current_file_ext == ".flac":
        flac_rename(file)
    elif current_file_ext == ".flac":
        flac_rename(file)
    elif current_file_ext in aac_like:
        mp4_rename(file)
    elif current_file_ext in aiff_like:
        aiff_rename(file)
    elif current_file_ext == ".wmv":
        wmv_rename(file)
    elif current_file_ext in asf_like:
        asf_rename(file)

input("処理が完了しました...")

使い方

  • 中に入っているexeを、リネームさせたい音楽ファイルが存在するディレクトリにコピーしてから実行して下さい
  • 基本的にPythonのスクリプトをWindowsで動くようにexe形式でラップしただけなので、GUIなんて存在しません。リネームするだけです

創作意欲を下さい...翼を下さい...

コメントを残す

メールアドレスが公開されることはありません。