Adobe 端末コマンド「aerender」を使用して After Effects レンダーファームを構築しました。 2台のMac Proで合計24のaerenderインスタンスを実行しています。
うまく動作しますが、時々(理由により)レンダーインスタンスが失敗し、コマンドを再実行するにはキーボードを押す必要があります。私は基本的にすべてのレンダリングを処理する必要がありますが、これは明らかに理想的ではありません。日中にエラーが検出された場合は、自動的に再起動したいと思います。
現在のレンダリングが失敗した場合は、デュアルパイプ| |を使用して別のレンダリングを開始しようとしましたが、aerenderが失敗した場合でも端末にきちんと終了するため、機能しません。デュアルパイプは、現在のレンダリングをControl-Cする場合にのみ機能します。
私のレンダリングコマンドは...
/Applications/Adobe\ After\ Effects\ 2020/aerender -project "/Volumes/Videos/Test.aep" -sound ON
レンダリングが失敗すると、次のように表示されます。
WARNING:After Effects warning: logged 2 errors, please check log.
出力を取得するにはgrepを使用する必要があるとします。"WARNING:After Effects warning"
また、この文字列を監視するには、初期コマンドを別のコマンドでラップする必要があるとします。
少し迷子になった。どんな助けでも大変感謝します。
答え1
OPも出力を見たいので、少しスクリプトが必要です。
#!/bin/bash
exec 3>&1 # Make a copy of the stdout fd on fd 3
while "/Applications/Adobe After Effects 2020/aerender" -project "/Volumes/Videos/Test.aep" -sound ON |
tee /dev/fd/3 |
grep 'WARNING:After Effects warning' >/dev/null
do
echo "Repeating the command"
done
ここで何が起こっていますが、macOSでサポートされているものが何であるかを推測しています。これはexec
fd 3 をスクリプトの標準出力と同じにします。 Macosで/dev/fd/3として使用できるようにしてほしいです。tee
これはaerender出力のコピーを送信するために使用されるため、スクリプトは元のコードと同じコンテンツを出力します。
次に、teeの出力をgrepに供給します。grep -q
最初の一致パターンが確認されると、処理が停止し、aerenderがtee
SIGPIPEを取得し、それによってaerenderがSIGPIPEを取得できるため、意図的にこれを使用しません。 aerender が多くの出力を生成せずにメッセージを一度だけ出力する場合、過度に注意を払うことがありますが、そうしても害にはなりません。
macosが/dev/fd/3をサポートしていない場合は、試してみてください。
#!/bin/bash
while O="$("/Applications/Adobe After Effects 2020/aerender" -project "/Volumes/Videos/Test.aep" -sound ON)"
echo "$O"
echo "$O" | grep 'WARNING:After Effects warning' >/dev/null
do
echo "Repeating the command"
done
これの欠点は、予想されるインターリーブ方式ではなく、すべてのaerenderの標準エラーが印刷され、次にすべての標準出力が印刷されることです。
試してみる正しいシステムがないため、これらすべてはテストされていません。