エピソード名一括変更

エピソード名一括変更

アニメーションの場合は、ファイル名を自動的に変更するbashを作成しようとします。

例:

[TAG] One Piece - 01 [Quality].mkv

to:

[TAG] One Piece - S01E01 [Quality].mkv

しかし、私はTheTVDBシーズンとエピソードをフォローしているので、必ずしもそうではありません。 Plexでこのクリッパーを使用します(https://github.com/ZeroQI/Absolute-Series-Scanner)しかし、Embyを使用し、TheTVDB形式に応じて名前を変更する必要があることを知っています。

他の例:

[TAG] One Piece - 872  [Quality].mkv

to:

[TAG] One Piece - S19E93 [Quality].mkv

最初は明確に説明していないので修正しました。

全体的にクリッパーと同様のことをしたいのですが、可能であればファイル名を変更してください。

ベストアンサー1

仮定:

  1. 名前を変更するファイルはすべて[<tag>] <name> - <serial> [<quality>].mkv
  2. <name>.lst各アニメーションには、エピソードを順番に一覧表示するルックアップファイルがあります。たとえば、次のようなものがありOne Piece.lstます。

    S01E01
    S01E02
    ...
    S01E08
    S02E01
    ...
    
  3. バージョン4(最小)bashシェルを使用してください。

アニメーションビデオを正規化するスクリプトは次のとおりです。

#!/bin/bash
# USAGE: canon_vids <dir> ...
# Canonicalize the filenames of all MKV vids in each <dir>

# All the anime lookup tables are in the lookup subdirectory
# where canon_vids is stored
lookup_dir="$(dirname "$0")/lookup"

log_skip() {
  echo "SKIP ($1): $2"
}

find "$@" -name \*.mkv | while read f; do
  # Check filename against our desired pattern
  # (We don't want to rename what's already been renamed!)
  if [[ $f =~ /(\[[^]]+\])\ (.*)\ -\ ([0-9]+)\ (\[[^]]+\].mkv) ]]; then
    # We've now split our filename into:
    prefix="${BASH_REMATCH[1]}"
    name="${BASH_REMATCH[2]}"
    serial="${BASH_REMATCH[3]##0}"
    suffix="${BASH_REMATCH[4]}"
    # Some sanity checks
    if (( serial <= 0 )); then
      log_skip "$f" "Invalid serial# '$serial' for $name"; continue
    fi
    # Let's look up the episode
    episode="$(sed -n ${serial}p "$lookup_dir/${name}.lst")"
    if [[ -z "$episode" ]]; then
      log_skip "$f" "Can't find serial# '$serial' for $name"; continue
    fi
    mv -vn "$f" "${f%/*}/${prefix} ${name} - ${episode} ${suffix}"
  fi
done

以下は、シーズンあたりのエピソードの数に基づいてこれらのルックアップファイルを生成する追加のスクリプトです。

#!/bin/bash
# USAGE: generate_series <#eps> ...
while [[ $1 ]]; do
  ((s++))
  for e in $(seq "$1"); do
    printf "S%02dE%02d\n" $s $e
  done
  shift
done

すべてテストしてみてください。

$ ls
canon_vids  generate_series

# Create One Piece lookup table
$ mkdir lookup
$ ./generate_series 8 22 17 13 9 22 39 13 52 31 99 56 100 35 62 49 118 33 96 > lookup/One\ Piece.lst
$ tail -n lookup/One\ Piece.lst
S19E92
S19E93
S19E94
S19E95
S19E96
$ wc -l lookup/One\ Piece.lst 
874 lookup/One Piece.lst

# Create fake One Piece MKVs (adding a couple more to trigger errors)
$ mkdir op
$ for i in $(seq 0 876); do touch "$(printf "op/[TAG] One Piece - %02d [quality].mkv" $i)"; done
$ ls op | wc -l
877

# And now, the moment of truth...
$ ./canon_vids op
renamed 'op/[TAG] One Piece - 724 [quality].mkv' -> 'op/[TAG] One Piece - S17E97 [quality].mkv'
renamed 'op/[TAG] One Piece - 86 [quality].mkv' -> 'op/[TAG] One Piece - S06E17 [quality].mkv'
...
renamed 'op/[TAG] One Piece - 819 [quality].mkv' -> 'op/[TAG] One Piece - S19E41 [quality].mkv'
SKIP (op/[TAG] One Piece - 00 [quality].mkv): Invalid serial# '0' for One Piece
renamed 'op/[TAG] One Piece - 52 [quality].mkv' -> 'op/[TAG] One Piece - S04E05 [quality].mkv'
...
renamed 'op/[TAG] One Piece - 865 [quality].mkv' -> 'op/[TAG] One Piece - S19E87 [quality].mkv'
SKIP (op/[TAG] One Piece - 875 [quality].mkv): Can't find serial# '875' for One Piece
renamed 'op/[TAG] One Piece - 295 [quality].mkv' -> 'op/[TAG] One Piece - S11E69 [quality].mkv'
...
renamed 'op/[TAG] One Piece - 430 [quality].mkv' -> 'op/[TAG] One Piece - S13E49 [quality].mkv'
SKIP (op/[TAG] One Piece - 876 [quality].mkv): Can't find serial# '876' for One Piece
renamed 'op/[TAG] One Piece - 655 [quality].mkv' -> 'op/[TAG] One Piece - S17E28 [quality].mkv'
...
renamed 'op/[TAG] One Piece - 93 [quality].mkv' -> 'op/[TAG] One Piece - S07E02 [quality].mkv'
renamed 'op/[TAG] One Piece - 278 [quality].mkv' -> 'op/[TAG] One Piece - S11E52 [quality].mkv'

# OK, but what happens when we run it again? Will our files be further renamed? Will Luffy find One Piece?
$ ./canon_vids op 
SKIP (op/[TAG] One Piece - 00 [quality].mkv): Invalid serial# '0' for One Piece
SKIP (op/[TAG] One Piece - 875 [quality].mkv): Can't find serial# '875' for One Piece
SKIP (op/[TAG] One Piece - 876 [quality].mkv): Can't find serial# '876' for One Piece

# Of course! Those files were never found in the lookup table, so they're still
# candidates for renaming. More importantly, no other files were touched.

おすすめ記事