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();
この記事が気に入ったらサポートをしてみませんか?