現在、bash シェル スクリプトを使用して、すべての Plex DVR 録画を FFMPEG を使用して H.264 にエンコードしています。オンラインで見つけたこの小さな for ループを使用して、すべてのファイルを単一のディレクトリにエンコードしています。
for i in *.ts;
do echo "$i" && ffmpeg -i "$i" -vf yadif -c:v libx264 -preset veryslow -crf 22 -y "/mnt/d/Video/DVR Stash/Seinfeld/${i%.*}.mp4";
done
これは目的を十分に果たしましたが、その過程で、エンコードされたファイルで元のファイル名Seinfeld (1989) - S01E01 - Pilot.tsが に変更されるように、ファイルの名前を好みの命名規則に変更したいと考えています。Seinfeld S01 E01 Pilot.mp4私はすでに正規表現を使用して.ts拡張子をに変更して.mp4いますが、特に bash シェルでは正規表現の専門家ではないので、助けていただければ幸いです。
私の Plex セットアップに興味がある人のために、私は専用の DVR として Linux Mint を実行している古いマシンを使用しており、実際にはゲーム マシンである日常のドライバーを使用してネットワーク経由でアクセスしているため、ビデオ エンコードの処理能力が向上しています。これは Windows マシンですが、WSL2 の下で Ubuntu bash を使用してスクリプトを実行しています。これは、Windows コマンド プロンプトや Powershell よりもこちらを好むためです (私の本業は、会社が発行した Mac の Web 開発者です)。そこで、似たようなことを考えている人のために、私のコードのサンプルを示します。
if [[ -d "/mnt/sambashare/Seinfeld (1989)" ]]
then
cd "/mnt/sambashare/Seinfeld (1989)"
echo "Seinfeld"
for dir in */; do
echo "$dir/"
cd "$dir"
for i in *.ts;
do echo "$i" && ffmpeg -i "$i" -vf yadif -c:v libx264 -preset veryslow -crf 22 -y "/mnt/d/Video/DVR Stash/Seinfeld/${i%.*}.mp4";
done
cd ..
done
fi
すべてのショーで for ループを実行することを検討しましたが、カスタム エンコーディング設定を使用しているショーがいくつかあるため、今のところ、このように各ショーを個別に実行しています。