仕事で使っている人はご存知の方も多いかもしれませんが、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を閉じても良いので、すぐ閉じる人は特に設定変更しなくても構いません。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwkDfWkjtXSye9y1jauqdX5L9mTSpFMOqCnubNTDsr7327M9cdKnQgTK9OL46PmAWzGWfKFMJ61Akpl1mvgN6mS-NH64rgnUfV-WYOd4lQqhNeYNWl24rjRRpuP7bO4n5twLLW0b7O5d_z/s320/00_%25E7%2592%25B0%25E5%25A2%2583%25E8%25A8%25AD%25E5%25AE%259A.png)
2.2 レンダーキューの出力モジュール設定を静止画シーケンスにします。Aviutlで結合する人は、PNGシーケンスが扱いやすいと思います。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjODRZ4Pj2KlrHUqg_YK4wApjn3z-q1yIgEN5B6Jgkmkvl14he0srQVdWwlL1udTXpzzZ_b2y3-sd6FMfmDg8k2F1hW1lJowMI4-pzRAfDYRrhvCqgAEyN7057Q1g3yi_zrZn1FlBz3EE6j/s320/01_%25E5%2587%25BA%25E5%258A%259B%25E3%2583%25A2%25E3%2582%25B8%25E3%2583%25A5%25E3%2583%25BC%25E3%2583%25AB%25E8%25A8%25AD%25E5%25AE%259A.png)
2.3 レンダリング設定のオプションで「既存ファイルをスキップ」にチェックを入れておきましょう。これが要になりますので、お忘れなきよう。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZAqbRpqNDfZY2vDf2lpE_0CJBJHuBkPDu8K96g1QPrsglKVpeOdgok8W1jGTVBdh1tJOAOTTNpcC1yDWmVg1klcBZR1nr1n0T-lecgX98LYSe4lNVDanw_Vxa1OkMDo2FPMP6rFcsK4VL/s320/02_%25E3%2583%25AC%25E3%2583%25B3%25E3%2583%2580%25E3%2583%25AA%25E3%2583%25B3%25E3%2582%25B0%25E8%25A8%25AD%25E5%25AE%259A.png)
2.4 ウィンドウメニューから、インストールしたスクリプトを呼び出します。
※ 私はリネームしていますが、元は「バックグランドでレンダリング.jsx」という名前でした。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo_0rULy0dA-UKRD53iS5A7DJ85-UNeNMAqb2nuNIpZBIIq4JLqpFNZ3JW_bBdBLOeC3UNjTbtOyOJSxLegdiCMMNKubuIys2Onpvt-S6pwn90QBoWTXCscZe4ypaL8WNUCk8JL_STVwrv/s320/03_%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%2597%25E3%2583%2588%25E5%2591%25BC%25E3%2581%25B3%25E5%2587%25BA%25E3%2581%2597.png)
2.5 こんなウィンドウが表示されますので、「強制実行」にチェックを入れて「バックグラウンドでレンダー開始」をクリックします。コマンドプロンプトが立ち上がって、レンダリングが始まったら、再び「強制実行」にチェックを入れて「バックグラウンドでレンダー開始」をクリックします。以下、これを繰り返して、3~5程度同時起動します。
最適な起動数は、コンポの負荷にも関係するので、プロジェクトやマシンスペックに応じて色々試してみてください。CGWORLDの検証記事も参考になると思います。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEJALW0FD8IevV4Sv6Dxaj-B3iJZJ0P-Czni-5pVhmHEyzIP8tlIoRQlPvsn4x0gKGHNn_ySyTkILApprNi0p4dikEkd7zFv54plOPo7QUXWD0y0lXTkm-CNo0IsclOeYZRCS9zc5UIerx/s320/04_BgRender.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVkmpMRy4yXc72ROh5CJw9cgoDnoYU_1Ah6jTG9lhyphenhyphenFjRUoceuF7mTw1xgBZHzecLAyMvt4joIe7fDbeuIQWXC-BXDyb7lV4CeF78fZkY5g2rSihQM-S9L9SEyJ_-N-AWz4TY4ir61rQSx/s320/05_%25E3%2583%25AC%25E3%2583%25B3%25E3%2583%2580%25E3%2583%25AA%25E3%2583%25B3%25E3%2582%25B0.png)
3 Aviutlで60FPS連番PNGをmp4にエンコードする手順
3.1 さて、こうして出来上がったPNGシーケンスですが、当然PNGなので音が入っていません。そこで、Aviutlで音と合成してmp4などににエンコードする訳ですが、PNG連番は、ファイル名以外は普通のPNGファイルなので、フレームレートの情報がありません。Aviutlの操作にちょっと癖があるので、ついでにその手順も記載しておきます。
3.2 読み込みは、普通の「開く」から、先頭のPNGファイルを選択するだけでOKです。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFpisicoRhW0PsDK_-gUbmozZOZ7QlUeXgv0zCjL5S4UEj9M9GMgk1xkJac_28zZhpWKxKE9sGqfhgKKxEC4zDnDhhRr7SyMGtjMb3zNep9FEUoOAD7cOWj2Mc2_Xa_QQBLDYMePnCrVD5/s320/06_aviutil_01.png)
3.3 音声も「音声読み込み」から普通に読み込んでOKです。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7sSR5xvbWdtxkdaS4OfKlFLmgvjoQGiJH3dkQt-DwD-Pp2KGJ8eyPfZ9Q0huEP4DaZlqrOFa1PCau-6GTeOg9rtIPwpMN6DcWnN5NdmzjVytItX3GhmN4uklXVQMFntlLb5LAxe_lo71D/s320/07_aviutil_02.png)
3.4 「編集」→「再生速度の情報を変更」をクリックし、読み込んだPNG連番が予定している再生速度と、読み込んだ音声ファイルのサンプリングレートの情報を入力してやります。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjihGmnOQWPatyrIfAxbU3yPvbAcb6hdUMct-MzU6oj3PPWJOE_1OrWhOICPNecM2mFFWpd4lqfJMloCOXbdw4Ve0cLxlRw5ftwDoMa5bmjjp8ui3MMknFtUg-6sgsdiQJsmJGg57TrDoZt/s320/08_aviutil_03.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghq56Iw8zb_jpvIRHOQW_rKKuBx5K_GDlZHYAKbt8PVjlKxkay27oDcHb_u9zHrmxK6cxEHwmz4xaMWMclT7gY_Fm_MaFr08oReTtjCUfKmOVxUgyxOxzogusJfQm0sb3_jFqj4_AIdzIN/s400/09_aviutil_04.png)
3.5 AfterEffectsで編集していた時に、音声が先頭でなかった場合は、「設定」→「音声の位置調整の設定」から音声ファイルのオフセット量を設定します。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_TbGuPYXIWihJsBXKqAuYaKvHVToJX5OtZT2Uo956DeojDJNm9t0N5Nxfg-lRgpmhGs51Z8EVz59a3bVmC2WphxuJ6IYOGzf3zHyGOy_KwLBu7Kn34W6XJG8q8OK-ImJ16iAN2Fc-rv-1/s320/10_aviutil_05.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCQQAq_tC-ZGt64WO02OMueSnJvRizqYZ_8JHKlDkl7G7eIm5fjLpCAvTitHBRPXBZHEOOeqw8L7ohFkSQkqrDRcMcMuARa3IriMGCw0zYvS752SRLwXaxCi_hMzKex2BU6qcSY1beXzKy/s320/11_aviutil_06.png)
3.6 この状態で、書き出しを行えば、AfterEffects上で編集したものと同じ内容の動画が出力されるはずです。
ということで、効率的なAfterEffectsのレンダリングとして、aerender.exeを使用した静止画連番レンダリングを紹介しました。
膨大なファイル数とか、フレームレートを内蔵できないとか、音声が入らないとか、様々な不便さから、静止画連番を毛嫌いしている人も多いと思います。私もそうでした。しかし、このレンダリング、すっげー早いんですよ。ちゃんと測ったわけじゃないですが、感覚的にはレンダリング時間が半分ぐらいになった印象です。
また、連番ファイルは、修正が発生した時に、修正箇所だけ再出力ができるのも魅力で、エフェクト入れ過ぎてプレビューまともに出来なくなったプロジェクトに対して、絵が出来たらとりあえず出力して、細かい調整は差分で出すととっても効率的。
以上、皆様のAfterEffectsライフの一助になれば幸いです。
0 件のコメント:
コメントを投稿