After Effectsのスクリプトを書く上で調べ回ったところまとめ走り書き

表題の通りです。また走り回らないようにここでまとめておきます。自分用なのでわけわからなかったり間違ってる所あるかも。調べながらメモってるからごった煮。

ドキュメントページ

知りたい事が書いてあるかも。ないかも。

コンソールメッセージ

$.writeln("hell! oh! world!");

コンソールにメッセージを出す。

外部スクリプトを読み込む

//@include "./common.jsx";
or #include  "./common.jsx"

どっちもいけるがvscodeだと#includeだと警告が出てちょっとうざったい。

キーフレームの値を取得。

指定されたキーフレームの値を取得。

var keyvar = app.project.activeItem.layer(index).propertySpec.keyValue(keyIndex)
//var keyvar = app.project.activeItem.layer(1).position.keyValue(1)
//$.writeln(keyvar)=>242,176,0

キーフレームの時間を取得

秒数で取得される。

app.project.item(index).layer(index).propertySpec.keyTime(keyIndex)
app.project.item(index).layer(index).propertySpec.keyTime(markerComment)

キーフレーム数を取得

app.project.item(index).layer(index).propertySpec.numKeys

//キーフレーム数から各キーフレームを回る
    for (var k = 0; k < comp.layer(1).position.numKeys; k++) {
     var nPositionkey = comp.layer(1).position.keyValue(k + 1);
   }

アクティコンプを取得

var comp = app.project.activeItem;

シェイプレイヤーの作成と塗り

シェイプレイヤーを作って塗り設定を追加する。

var comp = app.project.activeItem;
var myShapeLayer = comp.layers.addShape();
var shapeProperty = myShapeLayer.property('ADBE Root Vectors Group');
var myShapePath = shapeProperty.addProperty('ADBE Vector Shape - Group');

var myShape = new Shape()
myShape.vertices = [ [0,0], [100,0], [100,100], [0,100] ];
myShape.closed = true; //パスを閉じるかどうか
myShapePath(2).setValue(myShape);
var myShapeFill = shapeProperty.addProperty('ADBE Vector Graphic - Fill');

スクリプトで扱うファイルをダイアログを開いて読み込む

var fObj = File.openDialog('ファイルを選択');
if (fObj != null) {
 var res = fObj.open('r'); //読み込み専用で開く
 if (res) {
   var txt = fObj.read();
 }
}

JSONオブジェクトを扱う

参考。After Effectsだと問題無く扱えるくさい。

json = JSON.parse(txt);//パース
jsonstr = JSON.stringify(json)//文字列化


for構文

for (let i = 0; i < dogs.length; i++) {
}

毎回うろ覚えで探し回る羽目になるので書いとく。

シェイプレイヤーのカラーにアクセスする

    myShapeLayer.content("Fill 1").color.setValue([255,255,2555])//白

カラーコードのRGB変換

https://teratail.com/questions/21946

参考。16進数変換。

var code = "#8f5c44";
var red   = parseInt(code.substring(1,3), 16);
var green = parseInt(code.substring(3,5), 16);
var blue  = parseInt(code.substring(5,7), 16);

関数化

function parseRgb(code) {
   var code = code.replace(/[^0-9]/, "");
   var red = parseInt(code.substring(0, 2), 16);
   var green = parseInt(code.substring(2, 4), 16);
   var blue = parseInt(code.substring(4, 6), 16);
   return [red, green, blue]
}

関数の初期値設定

function makeShapeSquare(square, color) {
   if (square == undefined) square = 10;
   if (color == undefined) color = "ffffff"

何か宣言時に設定するとエラーが起きるからundefined判定で設定するようにしてる。

レイヤーの名前変更

    var myShapeLayer = comp.layers.addShape();
   myShapeLayer.name = "test";

シンプルに代入するだけ。

レイヤーにエクスプレッション追加

      myShapeLayer.scale.expression = "[100,100]"

ポジション変更

    myLayer.position.setValue([x, y, z])

左上隅が0になってるので注意。

確認ダイアログ

var cnf = confirm("ok?");
if (cnf == true){
   alert("OK !");
}
else{
   alert("NO !");
}

コンポジションの縦と横

var comp = app.project.activeItem;
comp.width;
omp.height;

レイヤー取得

app.project.item(index).layer(index) 
app.project.item(index).layer(otherLayer, relIndex) 
app.project.item(index).layer(name)

コンプ内の全てのレイヤーをforで回す

  for (var i = 0; i < comp.numLayers; i++) {
   $.writeln(comp.layer(i+1).name)//レイヤーは1から始まるので注意;
 }

ファイル出力

var exportDurationFile = new File;
exportDurationFile = exportDurationFile.saveDlg ("Choose your duration export location", "Text File:*.txt");
exportDurationFile.open("w");
exportDurationFile.encoding = "UTF-8";
exportDurationFile.write("test");
exportDurationFile.close();

コンプ数

var compNum = app.project.numItems;
//http://aejsx.hiroshisaito.net/project-object/attributes

新しいコンプを作る

app.project.items.addComp(name, width, height, pixelAspect, duration, frameRate)
//http://aejsx.hiroshisaito.net/itemcollection-object/methods/addcomp

コンプを巡って回す

 for (var c = 0; c <  app.project.numItems; c++) {
   if (!(app.project.item(c + 1) instanceof CompItem)) continue;
   activeComp = app.project.item(c + 1);
   d(activeComp.name);
}

少し回りくどい。コンプ数を取得、それぞれCompがどうかを判定してそうであれば変数に収納。

アクティブコンプを変更する

  activeComp = app.project.items.addComp("motionTrace" + (app.project.numItems + 1), 800, 500, 1, 120, 30);
 activeComp.openInViewer();

この記事が気に入ったらサポートをしてみませんか?