maemaewaterの日記

エンジニア兼ゲーマーの人の日記です。PHP/Python/JavaScript/C#/C++などによるプログラムに関することを主に書いています。

After Effects: 最初のエクスプレッション

After Effectsのエクスプレッション(Expression)を初めに作成したときにとりあえずわけが分からなかったのですが、始めたころから書いていくうちに分かったこと何回かに分けてまとめてみようと思います。

エクスプレッションは、基本JavaScript的な言語(今は、完全なJavaScriptが選べます)

今は、JavaScriptになっておりますのでJavaScriptという話で進めたいと思います。

f:id:maemaewater:20190127225401p:plain
After Effects: プロジェクト設定
メニューの"ファイル" > "プロジェクト設定"を選択するとダイアログがでてきます。ここで、"以前のExtendScript"と"JavaScript"のどちらを利用しているかを確認することができます(JavaScriptの方が処理速度が速いようです)。

エクスプレッションはJavaScriptで記述できるのですが、更に元々用意されている文字列を操作する関数(splitなど)や数学の関数(Math.sinなど)が使えたりします。このあたりは、WebブラウザJavaScriptを書くときに読むドキュメントも参考になったりします(MDN)。

レイヤーの属性に対して書いていくもの

エクスプレッションは、位置だったり大きさだったり様々な属性に対して書いていきます。このためそれぞれのエクスプレッションは独立しています(ほかの属性の値を参照する方法はあります)。そして属性ごとに出力する値の形式が異なります。

スカラーで返す属性

単純に単体の数値を返す場合です。

  • 回転
  • 不透明度

エクスプレッションでは単純に

10;

のように書くと反映されます。

文字列で返す属性

テキストのソーステキストがこれにあたります。

"Hello";

と書くと画面に反映されます(シングルクォートで囲んでも大丈夫です)。

2次元の配列で返す属性

配列([10, 20])のような2次元の情報を返す場合です。

  • アンカーポイント
  • 位置
  • スケール
[10, 20];

と書くと位置の場合はこの座標に移動させることができます。

時間の扱い

After Effectsのエクスプレッションではあらかじめtimeという変数が定義されていて、これを使うと再生している時間を取得することができます。秒単位で取得できます。時間に沿って動かしたい場合は、トランスフォームの位置のエクスプレッションを次のようにすると動かすことができます。

[10 + (time*100), 100];

(timeを足すだけではあまり動かないので100倍しています。1秒に100ピクセル動きます。)

参考:

helpx.adobe.com