【Python】mp4ファイルからファイル名、タイトル、アーティストを取得してCSVで書き出す

import os
import pandas as pd
from mutagen.mp4 import MP4
from os import path

# mp4ファイルからタイトルとアーティスト情報を取得する関数
def get_metadata(filepath):
    metadata = {}
    mp4 = MP4(filepath)
    metadata['title'] = mp4.get('\xa9nam', ['none'])[0]
    metadata['artist'] = mp4.get('\xa9ART', ['none'])[0]
    return metadata

# mp4ファイルのディレクトリを指定
#dir_path = input("directory path >> ")
dir_path = path.dirname(__file__)

# CSVファイルの保存先を指定
csv_path = path.dirname(__file__)

# ファイル名、タイトル、アーティストのリストを格納するリストを初期化
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,filename, metadata['title'], metadata['artist']])

# データをDataFrameに変換してCSVに書き出し
df = pd.DataFrame(data, columns=['filename', 'Newfilename','title', 'artist'])
df.to_csv(os.path.join(csv_path, "list.csv"), index=False)

# 修正が完了したらCSVファイルを読み込み、mp4ファイルのメタデータを修正する
while True:
    user_input = input("CSVファイルを修正しましたか? (Yes/No): ")
    if user_input.lower() == 'yes' or 'y':
        # CSVを読み込む
        df = pd.read_csv(os.path.join(csv_path, "list.csv"))

        # mp4ファイルのメタデータを修正する
        for index, row in df.iterrows():
            old_filepath = os.path.join(dir_path, row['filename'])
            new_filename = row['Newfilename']
            new_filepath = os.path.join(dir_path, new_filename)
            os.rename(old_filepath, new_filepath)
            mp4 = MP4(new_filepath)
            mp4['\xa9nam'] = row['title']
            mp4['\xa9ART'] = row['artist']
            mp4.save()
            # ファイル名を更新
            row['filename'] = new_filename

        # DataFrameをCSVに書き出し
        df.to_csv(os.path.join(csv_path, "list.csv"), index=False)
        break
    elif user_input.lower() == 'no' or 'n':
        print("CSVファイルを修正してください。")
    else:
        print("YesまたはNoで答えてください。")
       
print("書き換えが完了しました。")

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


*