AfterEffects Script Queue to Split Batch

なんだか、キューを積んでレンダリングすると時間がかかる、、、そんな気がしたんですよね。
今週末で本当に最終上演になるワルキューレラストライブのお手伝い作業時のことです。
(ちなみにこれまでのワルキューレライブは、新規映像がある時はほぼ皆勤で関わらせていただきました。)
試しに分割してaepを保存して、コマンドラインでレンダリングしてみたところ
全く比較にならないほど早い。

ちなみに、7個のアクティブなレンダーアイテムがありパターン違いという程度でほぼ同じ内容の処理です。
3つ目まで各1時間強かかっていました。延べ経過としては4時間弱ぐらいです。

Happened

散々作業をした後に再起動などせずにキャッシュなどが残った状態で
レンダリングしたというのもあると思うんですが
そのままだと9時間ぐらいかかるかなーと言う感じ。
デュレーション15秒(24fps)ほどのカットなのでAEで扱うには少々長目ではあるものの
厚めに効果がついているような状態じゃないので、ちょっといただけないなーと思ったんですよね。

Validation

そこでレンダリングを停止し先述した通り
分割(キューを分けた複数aepにする)→コマンドラインレンダリング
を試してみたわけです
すると各カット長くても5分程度なんです。驚異的なスピードアップ。
メモリキャッシュの問題なんでしょうかね、たぶん。
メインで使用しているMac mini M1は16GBですからね。
AEのGUI上からレンダーアイテムを積んだ状態でレンダリングした場合は
キャッシュがどんどん溜まり、それに伴って遅くなる。
コマンドラインの場合はそれぞれレンダリングコンポを指定するというのもあり
都度、メモリ開放・清算する感じなんじゃないかと思います。

Let’s Make

ということで、キューでアクティブなコンポを分割して
複数のバッチファイルを生成すると言うスクリプトを書いてみました。

出力ファイルがイメージシーケンスなら”既存のファイルをスキップする”にチェックし
コマンドラインレンダリングすりゃーいーじゃんと言われるかと思いますが、
最終は音付きmov(ProRes)にしなければいけないですし
再度音つけるためのレンダリングとかだるいし、ファイル増えるしって感じでめんどいわけです。
手続きや手順が増えればエラーの可能性はあがりますしね。

また、キューを分割した(アクティブ・デアクティブを切り替えた)aepを作るでも
別にいいだろうという声も聞こえてきそうでもありますが
いちいち、ダイアログがでてファイル名を指定するのもめんどいですし
aepを乱発するのはファイルの管理上もリスクが高いですからね。
コマンドラインレンダリングであれば、
オプションでコンポを指定することもできるためaepは複製する必要もありません。
そしてバッチファイルはテキストでしかないので出力も気楽です。

Step

スクリプトでの処理プロセスとしては以下です。

  1. アクティブなレンダーアイテムを取得
  2. 分割数を指定しアイテムを分割
  3. バッチファイルを作成・書き込み
  4. パーミッションを変更(※Rosettaをつかってなければ)

という感じです。

であとはターミナルからレンダリングしていけばよいわけです。
※Rosettaを使用している場合は同時にパーミッションも変更
さらにもれなく1つレンダリングしてみて
メモリやCPUに余裕があれば もう1つレンダリングを開始するという感じで増やしていったりします。
そうすると、さらに早くおわりますからね。
ということで、当初の状況でGUIからだと9時間かかるんじゃないかと
予想していたレンダリングが20分ほどでおわりました。
うーん、気をつけないといけませんね。常に注意を払う必要があります。
そして早いってのは本当に偉いです。

>



コメントを書く