アメグラ2号のブログ

1980年代後半の古き良きビデオゲームのほか、オッサンの個人的備忘録

python 音楽ファイルタグの整理

f:id:game-allergy:20210331143049p:plain


記事はこちら

game-allergy.hatenablog.com


音楽ファイルタグ追記/編集をするスクリプト

from mutagen.id3 import ID3, TIT2, TALB, TPE1, TRCK, APIC, TDRC, TCON
from mutagen.mp3 import MP3
import mutagen.id3

import glob
import os
import time
import datetime

# ================================================
# 目的:
# SONY/Music Centerへ曲データ挿入前に、タグ名を整理
# Music Centerはタグで整理/並び替えをするため
# (タグがないとグチャグチャになる)
# ================================================
# 機能:フォルダ内のMP3ファイルに対して、タグ付けをする
# file_path:【自動取得】
# filename:【自動取得】
# album:任意
# artist:任意
# title:【自動取得】/ファイル名から取得
# track:任意
# genre:任意
# date:【自動取得】
# description:任意
# savepath:なし/不要なので削除
# ================================================

# ===================================
# function
# ===================================
# get today
def Getdate():
    # datetime
    dt1 = datetime.date.today()
    dt2 = dt1.strftime('%Y-%m-%d')
    return dt2

    #dt1 = datetime.datetime.now()
    #dt2 = dt1.strftime('%Y-%m%d-%H%M-%S')

# see inside of directory
def Seedir(targetDir):
    # Check inside of directory
    files = glob.glob(targetDir + "/*.mp3")
    
    # pick up files as Dictionary(itemms=keys,values)
    l={}
    for f in files:
        # filefullpath
        filePath = os.path.abspath(f)
        # filename
        basename = os.path.basename(f)

        # Dictionary / collect filefullpath,basename
        l[filePath]=basename

    return l

# Chaeck files
def CheckEachFile(fileList,album, artist, track, genre, date, description):
    for f,v in fileList.items():
        print(f,v)
        Mp3tagRename(f,v,album, artist, track, genre, date, description)
        

# edit filename/ remove '.mp3' from filename
def RenameFilename(s):
    r = s.replace('.mp3','')
    return r

# Put the tag on MP3 file
def Mp3tagRename(f,v,album, artist, track, genre, date, description):
    title = RenameFilename(v)
    m = MP3(f, ID3=ID3)
    try:
        m.add_tags(ID3=ID3)
    except mutagen.id3.error:
        pass

    m["TPE1"] = TPE1(encoding=3, text=artist)
    m["TIT2"] = TIT2(encoding=3, text=title)
    m["TALB"] = TALB(encoding=3, text=album)
    m['TCON'] = TCON(encoding=3, text=genre)
    m['TDRC'] = TDRC(encoding=3, text=date)
    m["TRCK"] = TRCK(encoding=3, text=[str(track)])

    m.save()

# ===================================
# ready for exe 1
# ===================================
# current directory
currentdir = os.getcwd()

# Directory name where files move to
targetDir = currentdir + '/gamemusic1'

# ===================================
# ready for exe 2
# ===================================
album='GAMEMUSIC_Edited1(mp3)'
artist=''
track=''
genre='GameMusic'
description=''
# ===================================
# execution
# ===================================
dtToday = Getdate()
fileList = Seedir(targetDir)
CheckEachFile(fileList,album, artist,track, genre, dtToday, description)



目的がMusic Centerへ取り込んだ際に綺麗に並ぶように・・・なので、今回はこんなもんで十分。

Music Centerって、アルバム名でまとめてしまったりするので、取り込んだ際に「あれ?どこいった?」とかなるんだよね。。。。

この法則で考えると、「アルバム名でまとめてしまうこともできる」ってことで、タグ編集が重要になってくる。


スクリプトについて

ファイルのタグ編集をするに際して「フルパス」が必要になるので、globを使って引っ張ることに。
で、そのフルパスと一緒に「ファイルネーム」を使用したいので、今回はリストではなく、辞書を使って「フルパス」と「ファイルネーム」を管理。dictionary.itemsで引数渡しをして、keysとvaluesで使い分けることに。


ちょっとやりくりが過ぎるとややこしくなるなぁ。。。ま、いっか。