0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

レイヤーマーカーのタイミングでテキストを単語毎に表示させる

Posted at

Extendscriptを触り始めて約1か月

ある程度プログラムと言うものがつかめてきた気がします。
今月の目標だったプログラムは何となく完成したので、そのお披露目です。

※ネット上の先輩方のプログラムは未だサッパリのレベルです。
素人が作ってるぜーぐらいの感覚で見て頂ければと思います。
また何かアドバイスや、ココはこうした方がいいよ的な物があればコメント頂ければと思います。(理解出来るかわからないですが(泣))
宜しくお願いします。

やりたかった事

レイヤーマーカーの移動で単語毎の表示タイミングを変更したいよー!

プログラムの内容

①レイヤーマーカーの間隔の設定
②レイヤーのインポイントを現在の時間に設定
③レイヤーのアウトポイントをレイヤーのインポイントから始まり「単語の数」X「マーカーの間隔」の長さで設定
④アニメーターを追加
・セレクターの開始にエクスプレッションを追加 (レイヤーマーカーインデックスと単語のインデックスで表示させる)
・セレクターの終了を単語の数(text_array_length)に設定
・不透明度を追加し、数値を0に設定
 ・高度プロパティ
 ・単位をインデックスに変更
 ・基準を単語に変更
⑤マーカーの設定
・単語の数だけマーカーを作成
・マーカー名に分割した単語を設定

とまあこんな感じです。

それではコードです。

# target aftereffects

var myComp = app.project.activeItem;
var myLayer = myComp.selectedLayers[0];
var myText = myLayer.property("ADBE Text Properties").property("ADBE Text Document").value;
var text  = myText.toString (myText);
var text_array = text.split(' ');
var interval=0.5 ; //レイヤーマーカー間隔
var layIn=myLayer.inPoint=myLayer.time; //レイヤーのインポイント
var layOut=myLayer.outPoint = layIn+text_array.length*interval; //レイヤーのアウトポイント


function anipro(){
//アニメーターのプロパティー設定
    var text_ani=myLayer.property("ADBE Text Properties").property("ADBE Text Animators").addProperty("ADBE Text Animator");
    text_ani.property("ADBE Text Animator Properties").addProperty("ADBE Text Opacity").setValue(0);
    var sel=text_ani.property("ADBE Text Selectors").addProperty("ADBE Text Selector");
    sel.property("ADBE Text Range Advanced").property("ADBE Text Range Units").setValue(2); //1パーセント 2インデックス
    sel.property("ADBE Text Range Advanced").property("ADBE Text Range Type2").setValue(3); //1 文字 2スペースを除いた文字 3単語 4行
    sel.property("ADBE Text Index Start").expression='nKey=marker.nearestKey(time);'+String.fromCharCode(13)+
                                                                            '(time >= nKey.time ) ? P1 = nKey.index : P1=nKey.index-1;'
    sel.property("ADBE Text Index End").setValue(text_array.length);
//アニメーターのプロパティー設定ここまで
}

function layMar(){
//レイヤーマーカー設定
            for (var i=0; i<text_array.length; i++){
            var myMarker = new MarkerValue(text_array[i])
            myLayer.property("Marker").setValueAtTime(layIn+interval*i, myMarker);
        }
 }
//レイヤーマーカー設定ここまで

app.beginUndoGroup("自動マーカー");//アンドゥグループ開始
    anipro();
    layMar();
app.endUndoGroup();

これを実行するとこんな感じです。

bandicam 2017-04-29 20-07-35-975.jpg

テキストレイヤーに「I just want to take you higher」の文字が入力されていて、プログラムを実行すると
テキストレイヤーにマーカーが追加され、マーカーのタイミングでその文字が表示されるというものです。
もちろんマーカーを移動させれば、表示のタイミングも変わります。
ただマーカーの名前はガイド的なもので、実際にはAE内のマーカーのインデックス番号を参照しているので、マーカーの順番を変えても
表示文字は入れ替わりません。
頭から単語順に表示されます。

あと初めてファンクションを使ってみましたが、使い方は当たっていますか(笑)??
とりあえずまとめといて、使いたい時に呼び出す的な事でいいのでしょうか・・・

プログラム的には丁寧ではないですが、私自信で使う分には内容も把握しているしいいかなと(笑)
ただまだまだ改良はしていくので、またこのプログラムも更新しますね!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?