レンダー乙女とか - AdobeAfterEffects
目次
レンダー乙女…ヘンだね
レンダーオートメーション関連の話題
ああ、なんだかやっと本格的にさわってみた。 「レンダーオートメーション」などという名前なのでレンダリングのみに特化しているような気がするが、全然そんなことは無い。
要するに、「ExcelのVBA」とか「GIMPのscript-fu」みたいなアプリケーションコントロールマクロであります。
さらに中身はjavascript(ECMA-262)なのです。
javascriptだけではなく、定番の
- MAC=アップルスクリプト
- WIN=VBA も 使えますが、こちらだとプラットフォーム互換性が無いのでチョト敬遠してみる。
AEスクリプトでバイナリファイル
ちょこっと実験開始 できるかな? でっきーるっかーなー?
アルファテスト開始しました。
ほえほえ、だいぶ出来てきたのでアルファテスト版として公開試験に移行します。
- アルファテスト 公開中
- 気になる方は、どーぞご遠慮なく。
- パレットメニュー 装備
- 乙女ツール(アルファ)のご紹介(1)
暫定仕様です。さらにAEのバージョン変更時期と重なったので、本番開発はAE7上で行います。
つまり AE6.5対応版は、アルファでオシマイ…ええ。
今年中ぐらいに形になるといいですね。御意見・御感想お待ちしてまス。
…とか言いつつ
ぐだぐだしている間にすでにCS4(AE9) そしてCS5の声も聞こえる今日この頃です :乙女とかリファレンス
お引っ越し準備開始
「乙女」周りを、 AE6.5 から 7.0 環境に移行する為の情報を切り分けたページを作ります。乙女の引っ越し オブジェクト変更一覧は、こちらに移動しました。
何かお気づきの点などありましたら、がんがん突っ込んでください。
手始め
様子見のためにカンタンにコマンドをためしてみる「簡易コンソール」を作ってみたよ。
//お試しコンソール // Nekomataya/kiyo 2005.11.07 // 改行コード調整追加 11.08 // ファイル読み込み追加 11.09 // mac上での表示の改善・簡易GUIライブラリ試験 11.17 // 調整 11.23 これでおわりかな // 保存対応することにした。一応 // ついでにPhotoshop対応 inDesignとか他のCS組はもってないのでワカリマセン。12/21 try{if(app.isProfessionalVersion) { app.name="Adobe AfterEffects"; var isWindows=(system.osName.match(/Windows/))?true:false; }else{ isWindows=false; }; if(isWindows){var LineFeed="\x0d\x0a"}else{var LineFeed="\x0d"}; }catch(ERR){ isWindows =true; } /* edittextに初期状態で256バイトでペーストや手入力が打ち止めになる現象がある。 スクリプトでのデータ追加を行うと動的にメモリが確保されているようなので、 これは、edittextに無理やり空白を追加してフラッシュするメソッド。 このバグが解消したら不要。 引数はループ回数。1回アタリ1kb */ function getScript() { if(isWindows){ var scriptfile = File.openDialog("読み込むスクリプトを選んでください","JSX-Script(*.jsx *.js):*.JSX;*.JS"); }else{ var scriptfile = File.openDialog("読み込むスクリプトを選んでください"); } if (scriptfile && scriptfile.name.match(/^[a-z_\-\#0-9]+\.jsx?$/i)){ var myOpenfile = new File(scriptfile.fsName); myOpenfile.open("r"); myContent = myOpenfile.read(); return myContent.replace(/(\r\n?|\n)/g,LineFeed); }else {return false;}; } function addBuf_(KB) { var xStr=""; for(m=0;m<KB;m++){for(n=0;n<1024;n++) xStr+=" "}; this.text +=xStr; this.text =""; return this.text; }; function saveText() { if (! commandBox.text){alert("保存するデータがありません");return false;} if(isWindows) { var mySavefile = File.saveDialog("書き出しのファイル名を指定してください","nasXPSheet(*.js *.jsx *.txt):*.JS;*.JSX;*.TXT"); }else{ var mySavefile = File.saveDialog("書き出しのファイル名を指定してください",); } if(! mySavefile){return}; if(mySavefile.exists) { if(! confirm("同名のファイルがすでにあります.\n上書きしてよろしいですか?")){return false;}; } if (mySavefile && mySavefile.name.match(/^[a-z_\-\#0-9]+\.(jsx?|txt)$/i)){ var myOpenfile = new File(mySavefile.fsName); myOpenfile.open("w"); myOpenfile.write(commandBox.text); myOpenfile.close(); }else { alert("拡張子は js/jsx/txt を指定してください。") return false; }; } // GUI Setup //簡易GUIライブラリ var leftMargin=12; var rightMargin=24; var topMargin=2; var bottomMargin=24; var leftPadding=8; var rightPadding=8; var topPadding=2; var bottomPadding=2; var colUnit=120; var lineUnit=24; var quartsOffset=(isWindows)? 0:4; function nasGrid(col,line,width,height){ left=(col*colUnit)+leftMargin+leftPadding; top=(line*lineUnit)+topMargin+topPadding; right=left+width-rightPadding; bottom=(height <= lineUnit)?top+height-bottomPadding-quartsOffset:top+height-bottomPadding; return [left,top,right,bottom]; } myWinsize=[512,480]; myWinOffset=[239,40]; if (app.name=="Adobe AfterEffects"){ var testConsole= new Window("palette","nas-Console",[myWinOffset[0],myWinOffset[1],myWinsize[0]+myWinOffset[0],myWinsize[1]+myWinOffset[1]]); }else{ var testConsole= new Window("dialog","nas-Console",[myWinOffset[0],myWinOffset[1],myWinsize[0]+myWinOffset[0],myWinsize[1]+myWinOffset[1]]); } var titleLabel=testConsole.add("statictext",nasGrid(0,0,480,24),"試験コンソール nas(u) tools (Nekomataya/2005)",);titleLabel.justify="right"; var resultBox=testConsole.add("edittext",nasGrid(0,1,480,192),"",{multiline:true}); if(app.name=="Adobe AfterEffects"){resultBox.addBuf=addBuf_;} var commandBox=testConsole.add("edittext",nasGrid(0,11,480,192),"",{multiline:true}); if(app.name=="Adobe AfterEffects"){commandBox.addBuf=addBuf_;} actButton=testConsole.add("button",nasGrid(0,9,480,24),"evalCommand",); cluButton=testConsole.add("button",nasGrid(0,10,120,24),"clearResult",); clbButton=testConsole.add("button",nasGrid(1,10,120,24),"clearCommand",); loadButton=testConsole.add("button",nasGrid(2,10,120,24),"load",); saveButton=testConsole.add("button",nasGrid(3,10,120,24),"save",); actButton.onClick = function (){try{resultBox.text += eval(commandBox.text)+LineFeed;}catch(err){resultBox.text +=err.toString()+LineFeed;}}; cluButton.onClick = function (){resultBox.text ="";}; clbButton.onClick = function (){commandBox.text ="";}; loadButton.onClick = function (){newContents=getScript();if(newContents){commandBox.text=newContents;}}; saveButton.onClick = function (){saveText();}; // closeButton.onClick = function (){this.parent.close();}; testConsole.show(); if(app.name=="Adobe AfterEffects") { resultBox.addBuf(20); commandBox.addBuf(10); } commandBox.text="/*\tこのボックスにコードを書き込んでください\t*/"+LineFeed; //理由はわからないが初期状態だと256bでペーストが打ち止めになるのでスクリプト側からedittextの拡張をかけてやる。
余談: edittext の動作は、なんだかあやしいぞ htmlの <input type=text /> とか <textarea> に相当する "edittext" オブジェクトがあるんですけど… なんか動作がヘン? 上のスクリプトにありますが、普通にマニュアルどおりに初期化してテキストを打ち込んでゆくと 256バイトでそれ以上打ち込めなくなる… コピーペーストしても256バイトまでしか張りつかない… スクリプトから代入すると、何KBでも平気で登録できる… バグだよね。 うちだけかな? パッチ出てるかな?
ちょっと、気がついたけど
ブラウザのjavascriptと違って toString() は、あまり徹底してないみたい。
WEBブラウザは、テキストを期待する所にオブジェクトを与えると (toString()メソッドで)"[XX Object]"とかの文字列に変換して極力"エラー"が出ない様に気をつけているけれど、さすがにAEのスクリプトは性質が違うので、その辺遠慮なく "エラー" として文句を言われる…ま当然か…
上のスクリプトは、アルファテストに同梱されてます。
ObjectList
こんなのを作ることにする。app. 以下のオブジェクトリスト
app以外のオブジェクトもリファレンスが欲しいなぁ…と
…少し拡張して System File Folder Socketも扱うことにする。 む、ソケット関連のマニュアルがないかな? ま、たたいてみればわかるだべぇ
まだまだ続く
ダンプスクリプトを作ったので、とりあえず6.5と7.0の比較用に出力を掲載してみるよ。
ScriptLibrary
AE(含むCSシリーズ)用のライブラリを作ることにする。大体わかるとはいえ、GUI周りがかなりプリミティブな仕様なので、かなり使いづらい。
さらにプリミティブなわりには、拡張性がイマイチ? つー! あとは、「りまぴん」や「お道具箱」周りで使っている関数やオブジェクトの移植。
あと、「ねこまたや」拡張仕様? んー さらに詳しくは ScriptLibrary
役立つ関連リンク
- OpenSpace? 内 Adobe CS2 javascriptリファレンス
オブジェクト指向プログラム言語としてのJava Script
Java Script 講座
下のふたつの記事には、Javascript の HTML で無い部分についての解説があります。
こちらは、便利な関連リンク。何かご存知の方は教えてください。
Powered by YukiWiki 2.1.2a / Modified by Nekomataya.