
これを「標準」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でこれを行うには、次の手順を実行する必要があります。
- テレビ番組フォルダのソートされたリストを取得します(前の番組には通常年はありませんが、後の番組には年があります)。
- 各フォルダの終了年を正規表現に変更し、開始年だけを含め、
/-\d*\)/
Plex""
フォルダを大文字と小文字を区別せずに一致させます。一致するものがない場合は、年を含めないでください。 - 一致するものがない場合は、2に戻ってもう一度やり直してください。
- パターンに一致するPlexバージョンファイルのリストを取得します
/S\d+E\d+\.mp4/
(おそらくすべてを抽出してストリームをフィルタリング解除したときの字幕が含まれている可能性があります)。 - 各ファイルのシーズン番号を取得し、
Season x
フォルダ内の同じプレフィックスを検索します。シーズン0の場合は、そのSpecials
フォルダも検索してみてください。 - 一致する名前の拡張子を.mp4に置き換えるか、置き換えが行われていない場合は.m4vに置き換えます。
- Plexファイルを新しいパス+名前にコピーします。
- 一致するファイルを削除して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
答え2
次の理由により、Plex 最適化バージョンを自動的に使用しないでください。
これは既知のバグによって異なり、入力がトランスコーディングソフトウェアまたはiGPUが必要とするエンコードプロファイルに100%適していない可能性があります。したがって、より良いアプローチは、最適化されたバージョンを見て個別に交換することです。元のファイルを失うことは、保存スペースを節約するよりも大きな問題になる可能性があります。コストのためにスペースを節約することが目標である場合は、あまりにも多くのビデオを再トランスコードすると、電気料金が増え、ストレージスペースは時間の経過とともに安価になることを忘れないでください。
ついにほとんどの再トランスコーディングは品質の低下を意味します。そしてその正しいトランスコーディングオプションを見つけるのは簡単なことではありません。品質とファイルサイズの要件を満たしてください。