「aeスクリプトはやりたいけどUI作りまでたどり着かん」という方はぜひともprompt(“”,””)を試してみてください!
かんたんに入力欄ができるので楽しい!
prompt()を説明しますと、スクリプトに『var 〇〇 = prompt(“説明”,”入力”);』と書き、実行すると入力画面が出てきてくれます。さらに、〇〇には入力した文字が入ってくれるので、その○○を使って色々な処理ができるというわけです。
■例 選択レイヤーのリネーム
var mSl = app.project.activeItem.selectedLayers[0];
var mVal = prompt("Tittle","");
mSl.name = mVal;
まずは1行目で必要なものを用意します。選択レイヤーですね。
2行目で入力欄を表示させます。
いったんこの時点で入力が終わるまで3行目に行かない、ということです。
そして入力が終わるとmValにその入力値(文字)が入るので、
3行目で選択レイヤーの名前『name』に=でmValを入れ、リネーム完了というわけです。
*変数名はなんでもいいです。「mSlだと選択レイヤー感ないなあ」と思ったらselLayerでもよいですし、自由です!
prompt()で自由に入力ができるようになると、スクリプトが一気に楽しくなるのでオススメです!
prompt()を試していると起こりそうな問題
気軽に使えるprompt()ですが、試してみると「あれ、なんか動かない」とつまづくこともあります。それらのヒントを書き連ねておきます。
選択レイヤーじゃなく選択プロパティってどう書くの?
以下、よく使う選択〇〇の書き方です。
下にいくほど、上のものにつなげて書いているので、コピーするときは上のものも一緒にコピーしてください、
//今表示されているコンポジション
var mAi = app.project.activeItem;
//選択レイヤー(複数)
var mSls = mAi.selectedLayers;
//選択レイヤー(1つ)
var mSl = mAi.selectedLayers[0];
//選択プロパティ(複数)
var mSps = mSl.selectedProperties;
//選択プロパティ(1つ)
var mSp = mSl.selectedProperties[0];
選択プロパティにprompt()の入力値を入れても何も起こらない?
考えられるのは主に3つです。
1.プロパティには = で値を入れられない。
2.prompt()に入力された値が数字や配列ではなく文字と認識されている?
3.選択プロパティはselectedProperties[0]ではなく[1]になるときがある。
1.プロパティには = で値を入れられない。
aeの仕様で、プロパティには『〇〇.setValue( 値 )』で値を入れることになっています。
ただし、キーフレームがある場合は『〇〇.setValueAtTime( 時間,値 )』ですね。
時間にはapp.project.activeItem.timeと入れればインジケータのあるところにキーが打てます。
(先にvar mAi = app.project.activeItem;と書いてあれば、mAi.timeでよいです)
2.prompt()に入力された値が数字や配列ではなく文字と認識されている?
prompt()に入力された値は文字列という型です。型というのはデータの種類ですね。レイヤー名だと『文字列』、不透明度など1つの数値なら『数値』、位置など2つ以上のデータが[]でひとまとまりになっていれば『配列』などがあります。
aeスクリプトではこれらの自動変換機能があるため、文字列から数値に関しては問題である可能性は低いです。
しかし、文字列から配列へ自動変換はされないので、問題となっている可能性はあります。
以下、それぞれ明確に別の型にしたいときの例です。
文字列から数値
var mAi = app.project.activeItem;
var mSl = mAi.selectedLayers[0];
var mSp = mSl.selectedProperties[0];
var mVal = prompt("Tittle","");
//文字列から数値へ変換。
mVal = parseFloat(mVal);
//型が数値のもの(不透明度など)を選んでいれば値が変わる。
mSp.setValue( mVal );
parseFloat()を使って、文字列を数値に変換しています。
文字列から配列
var mAi = app.project.activeItem;
var mSls = mAi.selectedLayers[0];
var mSp = mSl.selectedProperties[0];
var mVal = prompt("Tittle","");
//文字列から配列へ変換。
var mValAry = mVal.split(",");
for(var i = 0; i <mValAry.length ; i++){
mValAry.splice(i,1, parseFloat(mValAry[i]) );
}
//型が配列のもの(位置など)を選んで、入力の区切り文字を,にしていれば値が変わる。
mSp.setValue( mValAry );
例えば『100,20』という文字を入力したとします。
まずsplit(“,”)を使い、入力された文字を , で分割して配列にします。この時点で配列への変換が成功しており、後のfor文は無くても動きます。
ただし、split(“,”)で作られる配列の中身はまだ、100と20という文字列で実は数値ではありません。なのでfor文内でsplice()を使い、「i番目から1つ抜いて、代わりにparseFloat()で数値に変換したものをいれる」という処理をしています。
3.選択プロパティはselectedProperties[0]ではなく[1]になるときがある。
試しに、何でもいいのでコンポジションにあるレイヤーにエフェクトを適用してみてください。
そしてコンポジションパネルにあるレイヤーのエフェクトパラメータを選択してみてください(エフェクトパネル内のものではありません)。すると――
そうなんです。実はその1個上のプロパティも自動選択されてしまっているんですね。これにより、selectedProperties[0]は選択したいプロパティの1個上のプロパティを指しています。選択したいプロパティはその次に入っているのでselectedProperties[1]なんですね。