現在、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 ループを実行することを検討しましたが、カスタム エンコーディング設定を使用しているショーがいくつかあるため、今のところ、このように各ショーを個別に実行しています。