はじめに
複数の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!