plexmediaserverのためのドラマ・アニメ用タグ付けpythonスクリプト

plexmediaserverのライブラリにドラマやアニメを登録する際、タグ付けが必要です。

例えば、

「波よ聞いてくれ #3[字]_2023-05-05_2315」

という名前で録画したドラマがあった場合、
以下のようにタグを付ける必要があります。

「波よ聞いてくれ #3s1e3[字]_2023-05-05_2315」

追加したタグは。「s1e3」。
つまり、season 1 episode 3(シーズン1の第3話)
であることを示しています。

このタグ付けを一括で行うpythonスクリプトを作成しました。

2023年5月19日 GUI版を公開しました。

スクリプトの使い方

以下をダウンロードして、適当なフォルダに展開してください。

中に入っているのは、フォルダとスクリプトです。
test_files
rename_animedrama.py

端末で、スクリプトがあるフォルダに移動します。

そこで、以下のコマンドを実行します。

user@test:~/test$ python3 rename_animedrama.py ./test_files

端末上には、マッチングした文字列が表示され、test_filesフォルダの中にあるファイルの名前にタグが追加されます。
既にタグがついている場合は、何もせず終了します。

タグを付けるためのドラマとアニメのタイトル調査

ドラマやアニメのタイトルでシーズンや話数がどう記述されているか、
2023年4月17~23日の間に放送された地デジ6チャンネルとBSのNHK2チャンネルの番組を調査した。

その結果、ドラマのタイトルでは以下のとおりでした。

表記名表記例
いげた#128
かっこ(1)12
第1話10
CASECASE11
合計51

アニメのタイトルでは以下のとおりでした。
表記名表記例
いげた#18
第1話6
シャープ♯13
かっこ(1)1
しょう第1章1
漢数字第一話1
1話1
合計21

この結果から、話数に関しては
「#(いげた)」「♯(シャープ)」と数字の場合
「(1)」「第1話」などの挟み込む場合
に話数へのタグを付けることにしました。
それ以外の「CASE1」「第一話」「第1章」などは、稀なケースなので、
事前に文字変換などして個別に処理してください。

シーズンに関しては、
「season」「season 」「Season」「シーズン」の場合
その後の数字をシーズン数としてタグ付けするようにしました。

タグ付けpythonスクリプトの作成

ChatGPTにお願いして、大枠を作り、微調整を行いました。
以下が最初のリクエスト。


pythonで以下の仕様のスクリプトを作成する。
引数で指定したフォルダの配下にあるすべてのファイルを調べる。
指定した条件にマッチした場合、文字列を付加する。

作成したスクリプトは、以下のとおりです。

# rename_animedrama_100.py
# version 1.0
# 2023/04/28
# by simplelife
#
import os
import re
import argparse

def rename_files(folder_path):
# 正規表現パターンのコンパイル
    season_pattern = re.compile(r'(Season|season|season |シーズン)(\d{1,2})')
    ep1 = re.compile(r'(#|♯)\d{1,3}')
    ep2 = re.compile(r'\(\d{1,3}\)')
    ep3 = re.compile(r'第\d{1,3}話')
    episode_list = [ep1, ep2, ep3]
    se_pattern = re.compile(r'(s|S)(\d{1,2})(e|E)(\d{1,3})')
# 全角から半角に変換するテーブル
    zenkaku_table = str.maketrans('1234567890()#','1234567890()#')

    # Get a list of all files in the folder and its subfolders
    file_list = []
    for root, dirs, files in os.walk(folder_path):
        for filename in files:
            file_list.append(os.path.join(root, filename))

    # Rename each file that matches the criteria
    for filepath in file_list:
        filename = os.path.basename(filepath)
        filename = filename.translate(zenkaku_table)
        if not re.search(se_pattern, filename):
            match = re.search(season_pattern, filename)
            if match:
                season = re.sub(r'\D', "", match.group())
            else:
                season = 1
            for episode_pattern in episode_list:
                match = re.search(episode_pattern, filename)
                if match:
                    episode = re.sub(r'\D', "", match.group())
                    new_filename = re.sub(episode_pattern, match.group() + f's{season}e{episode}_', filename)
                    os.rename(filepath, os.path.join(os.path.dirname(filepath), new_filename))
                    print(match.group())


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Rename files according to specified criteria')
    parser.add_argument('folder', metavar='FOLDER', type=str,
                        help='the folder to search for files')
    args = parser.parse_args()
    rename_files(args.folder)
2023年05月08日 | Posted in 電脳:録画サーバー | タグ: , , No Comments » 

関連記事

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください