既存の部分一致ファイルを移動する(Plexトランスコーダ)

既存の部分一致ファイルを移動する(Plexトランスコーダ)

これを「標準」bashスクリプト(QNAPで実行)で書く方法を見つけようとしていますが、どこから始めるべきかわかりません。 NodeJSで行うことができますが(会社で常に使用されるため)、実際にはそうすることはできません。むしろ何かをしてください。

私は実際のスクリプトではなく、これを行う方法についての指示を探しています(それでも止まらないでください);-)

組み込みPlexを使用したファイル変換(互換性などのため) - さまざまな映画ファイル(最も一般的には.avi、.mp4、または.mkv拡張子を使用)を含むフォルダツリーをインポートして.mp4に変換します。ドキュメントは少し異なるパスを使用します。 。

Plex出力ファイルを移動するのではなく、Plexに独自のクリーンアップを許可して入力ファイルにコピーし直したいと思います。

構造例 - from...

Plexバージョン/モバイルに最適化/マイテレビ番組/S01E01.mp4

...到着...

私のテレビ番組(1990-1995)/シーズン1 / s01e01私のエピソード名。mkv

メモ:

  • ルートパスは両方とも同じです(私の設定では、他の人がそのPlex Versionsフォルダを内部に含めることができます。My TV Show (1990-1995)スクリプトが完了するとGitHubに公開されます)。

  • テレビ番組のタイトルは変更されることがあります。括弧内に開始日と終了日(または-進行中の場合は後の日付)を入力しました。 Plexは、同じ名前のプログラムが複数ある場合、開始年がある可能性がある「公式」名を使用します。

  • 上記を考慮すると、基本名は同じですが、年が異なる複数のショーがある場合があります。

  • ターゲットのデフォルト名はSeason xフォルダーにあり(前の四半期番号はありません0)、同じプレフィックスがあります。

  • シーズン0の場合、おそらくSpecials/フォルダにあります。 (いつか一貫して作ります。)

  • ソースファイル名が.mp4ファイル名の場合、コピーされたターゲットファイルのファイル名は.m4vでなければなりません。

  • 新しいファイルをコピーした後、元のファイルを削除できます(コピー元と保存先のファイルは保持します)。

NodeJSでこれを行うには、次の手順を実行する必要があります。

  1. テレビ番組フォルダのソートされたリストを取得します(前の番組には通常年はありませんが、後の番組には年があります)。
  2. 各フォルダの終了年を正規表現に変更し、開始年だけを含め、/-\d*\)/Plex""フォルダを大文字と小文字を区別せずに一致させます。一致するものがない場合は、年を含めないでください。
  3. 一致するものがない場合は、2に戻ってもう一度やり直してください。
  4. パターンに一致するPlexバージョンファイルのリストを取得します/S\d+E\d+\.mp4/(おそらくすべてを抽出してストリームをフィルタリング解除したときの字幕が含まれている可能性があります)。
  5. 各ファイルのシーズン番号を取得し、Season xフォルダ内の同じプレフィックスを検索します。シーズン0の場合は、そのSpecialsフォルダも検索してみてください。
  6. 一致する名前の拡張子を.mp4に置き換えるか、置き換えが行われていない場合は.m4vに置き換えます。
  7. Plexファイルを新しいパス+名前にコピーします。
  8. 一致するファイルを削除して5を返します。

これで、明らかな切断と同じ名前変数を使用できるようになりました。私が助けたいと思う部分は次のとおりです。

初期フォルダを一致させるための最良の方法(1-3)は何ですか、それともより良いショートカットですか?ファイルがすでに存在する場合にのみ、ターゲットフォルダにコピーします。しかし、ソースファイルのファイル拡張子は異なります。)

ファイルが存在することを確認し、存在しない場合は別の拡張子の組み合わせを試してください。

編集:30TBを超えるファイルの場合、Plexはいいえ元の文書を交換してください(2015年から公に要求されました)。

ベストアンサー1

個人的にメインPlexライブラリフォルダのファイルを変換するには、FFmpegを使用することをお勧めします。おおよそ次のようになります。

set -s globstar;

for f in ./**/*.{avi,mp4,mkv}; do
    ffmpeg -i "$f" -c:a aac -c:v libx264 -preset slow "${f%.*}_b.mp4"
    rm "$f"
    mv "${f%.*}_b.mp4" "${f%.*}.mp4"
done

ソースファイルのディレクトリに最適化されたバージョンを保存するようにPlexを設定することもできます。

つまり、このコードは可能あなたが探していることを行いますが、完全にテストされていません。

Plex_Main="/Main/Plex/Dir/"
Optimized="/Optimized/Versions/Dir/"

for DIR in "$Optimized"/*; do
    if [[ -d "$DIR" ]]; then
        SHOW_MATCHES=("$Plex_Main"/*"$(basename "$DIR")"*/)

        # If there is one, and only one, match
        if [[ ${#SHOW_MATCHES[@]} -eq 1 ]]; then
            # The non-optimized show path
            SHOW_PATH="$Plex_Main"/*"$(basename "${DIR[0]}")"*

            for f in "$DIR"/*.mp4; do
                # Remove file extension
                EP_ID="${f%.*}"

                EP_MATCHES=("$SHOW_PATH"/*"${EP_ID[0]}"*)

                if [[ ${#EP_MATCHES[@]} -eq 1 ]]; then
                    ORIG_FILE="${EP_MATCHES[0]}"
                    cp "$f" "$SHOW_PATH/${ORIG_FILE%.*}.mp4"
                fi
            done
        fi
    fi
done

おすすめ記事