はじめに
複数のaepファイルを自動起動して、各々のaepに対してスクリプトやプラグインを自動実行する手法です。AEのコマンドライン起動時の引数に、’-r’ スイッチを使用する事で、スクリプトを引数として実行する事ができます。
起動時に引数に指定するスクリプトの中に、処理を施したいaepファイルを列挙して、Open&Closeします。
‘-r’ スイッチについては、下記リンク先を参照して下さい。
http://help.adobe.com/ja_JP/aftereffects/cs/using/WSD2616887-A41E-4a39-85FE-957B9D2D3843.html
コード
下記コードを、”aepproject.jsx”など適当なファイル名で保存して下さい。aepfiles = [ "C:/AEPProject/test1.aep", "C:/AEPProject/test2.aep", "C:/AEPProject/test3.aep", ]; var aep; for (var fname in aepfiles) { aep = new File( aepfiles[fname] ); if (aep.exists){ proj = app.open(aep); if (proj){ //ここに、任意の処理を記述します。 //さしあたりaepファイル名を表示しています。 alert(app.project.file.name); proj.close(CloseOptions.DO_NOT_SAVE_CHANGES); } } aep.close(); } app.quit(); |
コマンドラインから、
C:\AEPProject>"C:\Program Files\Adobe\Adobe After Effects CS6\Support Files\AfterFX.exe" -r C:\AEPProject\aeproject.jsxのように起動します。
使用例
http://ae-users.com/jp/tips/scripts-tips/2009/04/aftereffectsをスクリプトで制御2-プロジェクトにフォルダ/ を参考に、「複数のaepファイルに、特定の名前のフォルダを自動追加する」事を行ってみます。addfolder.jsxincを作成しておきます。
function addfolder(num) { app.project.items.addFolder("富士山"+num); } |
aepproject.jsxからaddfolder関数を呼び出してみます。
#include "C:/AEPProject/addfolder.jsxinc" aepfiles = [ "C:/AEPProject/test1.aep", "C:/AEPProject/test2.aep", "C:/AEPProject/test3.aep", ]; var aep; for (var fname in aepfiles) { aep = new File( aepfiles[fname] ); if (aep.exists){ proj = app.open(aep); if (proj){ //ここで、addfolder.jsxincのaddfolder関数を呼び出しています。 addfolder(fname); //Save automatically on close. proj.close(CloseOptions.SAVE_CHANGES); } } aep.close(); } app.quit(); |
応用例
rubyを用いたjsxファイル作成例です。特定フォルダ以下にあるaepファイルを列挙したjsxを作成して、AfterFX.exeを起動します。
下記コードを、”aepproject.rb”など適当なファイル名で保存して下さい。
#coding:utf-8 path = ARGV[0].gsub("\\",'/') aep = Dir.glob(File.join(path,"/**/*.aep")); jsx = File.expand_path(File.join(path, "aepproject.jsx")) open(jsx, "w") do |f| while l = DATA.gets l.sub!("REPLASE", aep.map{|a| "\"" + File::expand_path(a) + "\""}.join(",\n")) f.puts(l) end end ae = "C:\\Program Files\\Adobe\\Adobe After Effects CS6\\Support Files\\AfterFX.exe" jsx = jsx.gsub('/','\\\\') exec("#{ae}", "-r", "#{jsx}") __END__ #include "C:/AEProject/addfolder.jsxinc" aepfiles = [ REPLASE ]; var aep; for (var fname in aepfiles){ aep = new File( aepfiles[fname] ); if (aep.exists){ proj = app.open(aep); if (proj){ addfolder(fname); proj.close(CloseOptions.SAVE_CHANGES); } } aep.close(); } app.quit(); |
コマンドラインから、
C:\AEPProject>ruby aepproject.rb C:\AEPProjectのように実行します。
終わりに
このような手法にニーズがあるのか分からないですが、とりあえず公開してみました。今回の例では、外部のjsxincに記述した関数を呼び出していますが、
app.executeCommand(app.findMenuCommandId("メニューの文字列"));
等と組み合わせれば、プラグインの呼び出しも可能だと思います。
色々工夫して頂ければ幸いです。
新着記事 : 複数のaepファイルを順次起動してスクリプトを自動実行する http://t.co/ixNHGMrc
改良して指定したスクリプトかどうかを調べるチェッカーに出来れば良いかも知れません RT @AEUSERS: 新着記事 : 複数のaepファイルを順次起動してスクリプトを自動実行する http://t.co/PNjuVfRV
新着記事 : 複数のaepファイルを順次起動してスクリプトを自動実行する http://t.co/ixNHGMrc
複数のaepファイルを順次起動してスクリプトを自動実行する|AEP PROJECT… http://t.co/PqE3efiM
めも RT @CGWjp: 複数のaepファイルを順次起動してスクリプトを自動実行する|AEP PROJECT… http://t.co/sJIDa4Eb
新着記事 : 複数のaepファイルを順次起動してスクリプトを自動実行する http://t.co/ixNHGMrc
@nisitake くやしいけど俺あんまり実写扱わないからなぁ。スクリプト書けたらそういう風に組めそうだけど、難易度高いな。http://t.co/rgRV7mK2
Wham bam thank you, ma’am, my queositns are answered!