AfterEffects Extension(CEP) TimeLine Launcher(React)
プロジェクト難読化スクリプト1Gを追加

何かしらExtendscriptではなくjsの追加ライブラリで作った値やオブジェクトを渡すようなことをしてみたいと
おもったのですが、パッと簡単なものが思いつきませんでした。
基本的にExtendscript側では簡単なことしかしないようにしたいですし
そうなると限られてくるよなー、便利なモノ、、、思いつかんなーと悩んでました。

ということで、久々の意地悪系スクリプトです。
まーほぼ使うことはない意地悪系スクリプトですが
これまでにはエクスプレッションを含むトランスフォーム、パラメータのフルベイクのようなものが代表例です。
ちなみにこれは尺にもよりますがaep自体が1GBを超え、起動するのに1時間以上かかるようなものになったりします。

さて新たにつくった意地悪系スクリプトはプロジェクトの難読化スクリプトです。
フッテージ、レイヤー、エフェクトそれぞれの名前を
jsに追加したライブラリから出力したハッシュ値にしてみようってことですね。
個人的にはそこまで意地悪でもないかなとは思います。
プラモデルの説明書やバイクのサービスマニュアルなども部位に割り振られたアルファベットなどと
番号の組み合わせだったりするわけで名前を持ってヒントとする、、、
名は体を表すというのが無用に親切であるというだけ。

むしろ、”髪”とか”ハイライト”、”服”とかそんな感じでプロジェクトや社内ルールでローカライズされた
エフェクト名なんかの方がトラップでもあり難読化されているような印象をうけます。
社外への発注を想定していないのに様々な理由で発注されていることなんでしょうけれど。
ハッシュ値の場合はまだ諦めはつきます。やられた、、、ってことでw

さて、早速ですがnpmでhashidのライブラリを追加して出力テストを
リモートコンソールでやってみます。すさまじく早い。
Extendscriptのなんと遅いことかを痛感し哀れにかんじます。

math.random

と組み合わせて2000個ほどのハッシュ値を繰り返し出力しても一瞬です。

さてホストになるExtendscriptに渡してみましたがちゃんと受け取れます。
早速、app.project.itemsで全アイテム取得して、コンポの場合は中のレイヤーも取得、さらにそのエフェクトも
という感じでサクッとExtendscriptを書いてみました。
10年以上前のAE用のスクリプトを書き始めた頃から、ん?ってことがあるんですが

var allItems=app.project.items;

としてallItemsにこの時点での固有の配列としてapp.project.itemsを渡したつもりなのに
forをつかった繰り返しで一つづつ名前を変更しようとすると
同じアイテムが複数回処理され、処理されないアイテムがでてくる。
これって、毎度app.project.itemsを取得し直してる?
あまり使うことはないので、久々に使用しておもいだしました。
まー、ぶっちゃけ回避できるならばそれで良いので、新たに別の配列を用意し
一旦こちらにpushで追加しそれを繰り返しでリネームしていきます。
もちろん配列として宣言しallItemsにforでpushしていっても大丈夫です。
これで、1アイテムが多重リネームされることを回避できます。

これにて、とりあえずReactを実装したタイムラインローンチャcepのテストは終了として
次行こうと思います。



コメントを書く