#@mp4ファイルからアーティスト名を取得してアーティスト名ごとに自動振り分けする
import os
import re
import pandas as pd
import csv
import shutil
from mutagen.mp4 import MP4
# mp4ファイルからタイトルとアーティスト情報を取得する関数
def get_metadata(filepath):
metadata = {}
mp4 = MP4(filepath)
metadata['title'] = mp4.get('\xa9nam', [''])[0]
metadata['artist'] = mp4.get('\xa9ART', [''])[0]
return metadata
# ファイルを移動する関数
def move_file(src_path, dst_path):
try:
shutil.move(src_path, dst_path)
except Exception as e:
print(f"Could not move file {src_path} to {dst_path}: {e}")
# mp4ファイルのディレクトリを指定
dir_path = input("mp4 file directory path >> ")
dir_path = re.sub(r"[\"\' ]", "", dir_path)
# CSVファイルの保存先を指定
csv_path = input("CSV file path >> ")
csv_path = re.sub(r"[\"\' ]", "", csv_path)
# ディレクトリを自動生成する先のパスを指定
make_dir_path = input("directory path to create new directories >> ")
make_dir_path = re.sub(r"[\"\' ]", "", make_dir_path)
# ファイル名、タイトル、アーティストのリストを格納するリストを初期化
data = []
# ディレクトリ内の全てのmp4ファイルに対して処理を実行
for filename in os.listdir(dir_path):
if filename.endswith('.mp4'):
filepath = os.path.join(dir_path, filename)
metadata = get_metadata(filepath)
data.append([filename, metadata['title'], metadata['artist']])
# アーティスト名のフォルダがあるか確認し、なければ作成
artist_dir_path = os.path.join(make_dir_path, metadata['artist'])
if not os.path.exists(artist_dir_path):
try:
os.mkdir(artist_dir_path)
except OSError as e:
print(f"Could not create directory {artist_dir_path}: {e}")
# ファイルを移動
move_file(filepath, os.path.join(artist_dir_path, filename))
# データをDataFrameに変換してCSVに書き出し
df = pd.DataFrame(data, columns=['filename', 'title', 'artist'])
df.to_csv(os.path.join(csv_path, "list.csv"), index=False)
# CSVファイルからディレクトリを生成する処理
load_csv_path = os.path.join(csv_path, "list.csv")
encode_type = "UTF-8"
# スキップする行数
skip_rows = 1 # 1行目はヘッダ行なので除外
with open(load_csv_path, encoding = encode_type) as f:
# CSVファイルをロード
reader = csv.reader(f)
# 1行ずつデータを取り出し
for cnt, row in enumerate(reader):
# スキップする行数分は何もしない
if(cnt < skip_rows):
continue
# 2列目(アーティスト名)をディレクトリ名にする
dir_name = row[2]
# ディレクトリがなければ新規作成
dir_path = os.path.join(make_dir_path, dir_name)
try:
os.mkdir(dir_path)
except OSError as e:
print(f"Could not create directory {dir_path}: {e}")
【Python】mp4ファイルからアーティスト名を取得してアーティスト名ごとに自動振り分けする
コメントを残す