#はじめにこの記事は・・・
AEで私が使ったコードを素早くコピペで使えるようにこの記事で追記していきます。
追記していった分はジャンル分けして目次に追加していきます。
目次
サイズ関連
L シェイプまたはテキストレイヤーのサイズを取得
シェイプレイヤー関係
L シェイプレイヤーのパス座標と接線を取得
便利なFunction
L imgのスケールをコンポジションサイズに合わせる
L テキストレイヤーの高さを取得
コンポジションセッティング
L フレームレート一括設定 (2018/11/29更新)
レイヤー関係
L レイヤーの開始時間をランダムに
L レイヤーの置き換え
#レイヤー関係
###レイヤーの開始時間をランダムに設定する
var myLay = app.project.activeItem.selectedLayers;
app.beginUndoGroup("");
for (var i=0; i<myLay.length; i++){
myLay[i].startTime = Math.random(15)
}
app.endUndoGroup();
###レイヤーの置き換え
コンポ1に複数のレイヤーがありそれを、プロジェクトアイテムにあるアイテムを指定して置き換える。
まずは元となるプロジェクトアイテムを選択状態にして、次に置き換えたいレイヤーを指定する。
プロジェクトアイテムの選択数とレイヤーの選択数が同じじゃないと、エラーが起きるはず。
var n = app.project.selection.length;
var projectItem = []
var myLay = app.project.activeItem.selectedLayers;
for (var i=0; i<n ; i++){
projectItem.push(app.project.selection[i])
}
for (var i=0; i<myLay.length; i++){
myLay[i].replaceSource(projectItem[i],false)
}
#サイズ関連
###シェイプまたはテキストレイヤーのサイズを取得(戻り値は配列)
function get_layer_size(targetComp,targetLayer){ //Result = array [ left width top height ]
var curTime = targetComp.time;
var tw =targetLayer.sourceRectAtTime(curTime, false).width; //テキストの全体の幅
var th = targetLayer.sourceRectAtTime(curTime, false).height; //テキスト全体の高さ
var tl = targetLayer.sourceRectAtTime(curTime, false).left; //テキストの左側の座標
var tt = targetLayer.sourceRectAtTime(curTime, false).top;//テキスト上の座標
return [tw,th,tl,tt] ;
}
/*
get_layer_size(targetComp,targetLayer)の
第1引数(targetComp)はターゲットとなるコンポジション
第2引数(targetLayer)はターゲットとなるレイヤー 例(シェイプレイヤーやテキストレイヤー
戻り値は配列になっており、width / height / left / top の順で格納されています。
var myComp = app.project.activeItem;
var myLayer = myComp.selectedLayers[0];
$.writeln(get_layer_size(myComp,myLayer));
また小数点が細かいので、プログラムでAEに適用したら弾かれる場合があるのでその場合は
function roundFloat(target,n) { //第1引(数値)・第2引数(小数点の数) 例え) roundFloat(1.55555,2) 戻り値は = 1.56となる
var _pow = Math.pow( 10 , n );
return Math.round( target * _pow ) / _pow;
}
で小数点第n位まで出してくれるメソッドを使っています。
#シェイプレイヤー関係
###シェイプレイヤーのパス座標と接線を取得
var selectedShape = app.project.activeItem.selectedProperties[0].path.value.vertices; //ベクターパスの座標取得
var inTan = app.project.activeItem.selectedProperties[0].path.value.inTangents; //接線インの座標取得
var outTan = app.project.activeItem.selectedProperties[0].path.value.outTangents; //接線アウトの座標取得
//確認用
//取得した座標を確認する
function arrCheck (target){
for (var i = 0 ; i < target.length ; i ++ ){
$.writeln(target[i]);
}
}
$.writeln('■')
arrCheck (selectedShape)
$.writeln('▼')
arrCheck (inTan)
$.writeln('●')
arrCheck (outTan)
/* result
■
-19.5,-16
19.5,-8
18.5,16
▼
1.10491943359375,26.583984375
-7.00799560546875,-0.3436279296875
0,0
●
15.9326171875,12.5942993164063
0,19.0562133789063
0,0
*/
#Function関連
###imgのスケールをコンポジションサイズに合わせる
//コンポジションにフィットさせるためスケールを計算
function ScallSize(targetComp,targetLayer){
var setw = targetComp.width/targetLayer.source.width*100;
var seth = targetComp.height/targetLayer.source.height*100;
if (targetLayer.source.width > targetLayer.source.height){
return [setw,setw];
}
else if(targetLayer.source.width < targetLayer.source.height){
return [seth,seth];
}
else if (targetLayer.source.width == targetLayer.source.height){
return [setw,setw];
}
}
###テキストレイヤーの高さを取得
引数にはコンポジションオブジェクトとターゲットとなるレイヤーのオブジェクトを入れる
function layerheight(targetComp,target){
var curTime = targetComp.time;
var temp = target.sourceRectAtTime(curTime, false).height;
var _pow = Math.pow( 10 , 4 );
return Math.round( temp * _pow ) / _pow;
}
#コンポジションセッティング
###フレームレート一括設定
var myItems = app.project.selection;
var targetFrameRate = 24;
for (var i = 0; i < myItems.length; i++) {
if (myItems[i] instanceof CompItem) {
myItems[i].frameRate = targetFrameRate;
}
}