2016年1月11日月曜日

AfterEffectsのレンダリングを最適化 (+Aviutlで60FPS連番PNGをmp4にエンコード)

 それなりにハイスペックなマシンでAfterEffectsを使っていると、レンダリングの際にCPUメーターが余っているのが気になると思います。
 仕事で使っている人はご存知の方も多いかもしれませんが、AfterEffectsのレンダリングはマルチスレッドに完全には最適化されておらず、レンダリングを最速で行うには、ちょっと一工夫が必要なのだそうです。
 例によっていつも通りの自分用備忘録ですが、趣味でAfterEffectsを使う人には知らない人も多いと思いますので、参考になれば幸いです。

1 手法
 AfterEffectsには、「aerender.exe」というコマンドラインのレンダリングツールがインストールされており、これをAfterEffectsからスクリプトで呼び出して使用します。
 この時、単に呼び出すだけでは、バックグラウンドでレンダリングできるだけなのですが、レンダリングファイルの形式をPNG連番等の静止画連番フォーマットにしたときは、レンダリング設定で「既存ファイルをスキップ」というオプションを付けることができます。
 これは、レンダリング出力先に、レンダリングしようとしたフレームのファイルが既に存在した場合、そのフレームを飛ばして次のフレームのレンダリングを行うというものです。
 実は、aerender.exeは複数同時に実行できるため、先述の静止画連番出力におけるフレームスキップを駆使して、フルにCPUを使うように複数のaerender.exeを起動してレンダリングしようというのが今回の手法になります。
 一般的には aescripts + aeplugins の BG Renderer Basic もしくは Pro を使う人が多いかと思いますが、今回はbry-ful氏のWebサイトbryful's Homepage 2ndの「1日1個 AEスクリプト」より、「bgRender_WinMac.zip」を使わせていただきました。
 なお、インストール方法は、解凍して出来たjsxファイルを、
「C:\Program Files\Adobe\Adobe After Effects ○○\Support Files\Scripts\ScriptUI Panels」
にコピーすればOKです。

2 AfterEffectsのレンダリング最適化手順
2.1 まず、バックグラウンドでレンダリングが実行されるので、AfterEffectsの環境設定から、他のアプリケーション用に確保するRAMの値をある程度確保しておきます。もっとも、aerender.exe起動後はAfterEffectsを閉じても良いので、すぐ閉じる人は特に設定変更しなくても構いません。


2.2 レンダーキューの出力モジュール設定を静止画シーケンスにします。Aviutlで結合する人は、PNGシーケンスが扱いやすいと思います。


2.3 レンダリング設定のオプションで「既存ファイルをスキップ」にチェックを入れておきましょう。これが要になりますので、お忘れなきよう。


2.4 ウィンドウメニューから、インストールしたスクリプトを呼び出します。
※ 私はリネームしていますが、元は「バックグランドでレンダリング.jsx」という名前でした。


2.5 こんなウィンドウが表示されますので、「強制実行」にチェックを入れて「バックグラウンドでレンダー開始」をクリックします。コマンドプロンプトが立ち上がって、レンダリングが始まったら、再び「強制実行」にチェックを入れて「バックグラウンドでレンダー開始」をクリックします。以下、これを繰り返して、3~5程度同時起動します。
 最適な起動数は、コンポの負荷にも関係するので、プロジェクトやマシンスペックに応じて色々試してみてください。CGWORLDの検証記事も参考になると思います。



3 Aviutlで60FPS連番PNGをmp4にエンコードする手順
3.1 さて、こうして出来上がったPNGシーケンスですが、当然PNGなので音が入っていません。そこで、Aviutlで音と合成してmp4などににエンコードする訳ですが、PNG連番は、ファイル名以外は普通のPNGファイルなので、フレームレートの情報がありません。Aviutlの操作にちょっと癖があるので、ついでにその手順も記載しておきます。

3.2 読み込みは、普通の「開く」から、先頭のPNGファイルを選択するだけでOKです。


3.3 音声も「音声読み込み」から普通に読み込んでOKです。


3.4 「編集」→「再生速度の情報を変更」をクリックし、読み込んだPNG連番が予定している再生速度と、読み込んだ音声ファイルのサンプリングレートの情報を入力してやります。




3.5 AfterEffectsで編集していた時に、音声が先頭でなかった場合は、「設定」→「音声の位置調整の設定」から音声ファイルのオフセット量を設定します。




3.6 この状態で、書き出しを行えば、AfterEffects上で編集したものと同じ内容の動画が出力されるはずです。

 ということで、効率的なAfterEffectsのレンダリングとして、aerender.exeを使用した静止画連番レンダリングを紹介しました。
 膨大なファイル数とか、フレームレートを内蔵できないとか、音声が入らないとか、様々な不便さから、静止画連番を毛嫌いしている人も多いと思います。私もそうでした。しかし、このレンダリング、すっげー早いんですよ。ちゃんと測ったわけじゃないですが、感覚的にはレンダリング時間が半分ぐらいになった印象です。
 また、連番ファイルは、修正が発生した時に、修正箇所だけ再出力ができるのも魅力で、エフェクト入れ過ぎてプレビューまともに出来なくなったプロジェクトに対して、絵が出来たらとりあえず出力して、細かい調整は差分で出すととっても効率的。
 以上、皆様のAfterEffectsライフの一助になれば幸いです。

0 件のコメント:

コメントを投稿