Help us understand the problem. What is going on with this article?

AEScript コピペ集まとめていきます記事。

More than 1 year has passed since last update.

はじめにこの記事は・・・

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;
        }
    }
TimeToEdit
現在timetoeditという名前でyoutubeでtutorialやテンプレート動画を作ってます。 https://www.youtube.com/c/TimeToEdit 基本的に自分用のメモです。
https://www.youtube.com/c/TimeToEdit
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away