After Effectsのゾンビ変数

ここのところ、作り続けていたグレーディングシステム用のパイプラインアプリですが、ほぼ完成し、あとはバグ潰しや機能改善をチクチクと地道に進めていくのみです。どんなに気を配ったつもりでも、実際に運用すれば、ポコポコと穴は出てくるものです。

After EffectsをAppleScriptで駆動する方法は、丁寧にAppleScriptとAfter Effects間でやり取りするのではなく、ESTKの命令文を作って丸投げする方法です。AppleScriptでPhotoshopを操作する際は、様々な返値を利用できるのですが、After Effectsの場合は貧相なexitCodeしか返ってきません。exitCodeは整数のみで、文字列などは扱えないので、スクリプトを実行した結果は実質受け取り不可能に等しいです。例えば、コンポジションのレイヤー名一覧を外部から取得する‥‥なんて事は通常の段取りではできないのです。

じゃあ、どうやってAfter Effectsをスクリプトで転がすかと言うと、ソケットや独自のクリップボードを使う‥‥などもありますが、環境の整備がそこそこ面倒なので、私は「変数を泳がす」方法で切り抜ける事が多いです。恐らく、一番安易で簡単です。

After Effectsの変数はゾンビのように、After Effectsが死ぬ(アプリ終了)まで生き続けるので、これを利用して、「ゾンビ変数に値を持たせたまま泳がせて」外部から上手く操作するわけです。

AppleScriptなど外部からは、変数・定数の中身ではなく、あくまで変数名だけで、転がしていきます。つまり‥‥
 
//Script 1
var _OUTPUT_COMP=app.projects.item(1);

‥‥として、変数に普通に代入しておけば、スクリプトを一旦終了しても、After Effectsが終了しないかぎりは、いきなり、
 
//Script 2
_OUTPUT_COMP.layer(1);

‥‥と書き始めても、undefinedになる事もなく、普通に取り扱い可能です。変数の中身は外界に取り出さずに、変数自体を外部からあっちゃこっちゃと転がして、上手くいった場合は0、そうでない場合は0以外をexitCodeに代入して、「result as integer = 0」でBooleanに変換し「結果報告だけを聞く」カタチにするのです。

いつまでも変数が死なないこの習性(?)を利用すれば、結構自由にAfter Effectsを「遠隔操作」で転がせるのですが、反面、変数が暴走(大袈裟ですけど)する危険性もあります。JavaScriptはDimとか宣言しなくても、おもむろに変数を使う事ができますが、ゆえに、既に前の前の前のスクリプトで使用済みの変数を、意識無しに使ってしまう可能性もあります。なので、ゾンビ変数を意識的に転がす際は、変数の名前のお約束を自分の中で定義してキッチリと運用する事が必須となります。


変数 i に10が代入されたところでスクリプト終了。


別のスクリプトで 変数 i をおもむろに使うと、既に10の値がセットされているので、結果は30。うひー。‥‥もちろん、変数 i の使用前歴がなければ「iは未定義」となってエラーです。スクリプト作成者の「管理能力」が問われる仕様ですネ。undefinedねらいの軽妙な文面でなく、しっかり変数の宣言と初期化をやっておかないと、後で弩壷にハマる仕様となっております。


‥‥ちなみに、エクスプレッションはそういう事(ソンビ)はないようで、1レイヤー1フレームごとに値はクリアされるみたいです。まあ、全てのエクスプレッション上の変数が生き残りまくってたら、わけがわかんなくなるでしょうからネ。

 

関連する記事

calendar

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293031    
<< October 2017 >>

selected entries

categories

archives

profile

search this site.

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM