に投稿

特定のプロパティを全て返す関数

matchNameが一致するプロパティを再帰で全部返す。何かと便利。

/**
 * 特定のプロパティを返す
 * @param {*} rootObj レイヤーでもコンテンツでもOK
 * @param {*} nestingLevel 0でOK
 * @param {*} matchName 探したいプロパティのmatchName
 * @returns 
 */
function getProp(rootObj, nestingLevel, matchName) {
  var propTo = [];
  dumpPropTree(rootObj, nestingLevel, matchName);
  function dumpPropTree(rootObj, nestingLevel, matchName) {
    var countProps = rootObj.numProperties;
    for (var propIndex = 1; propIndex <= countProps; propIndex++) {
      var prop = rootObj.property(propIndex);
      if (prop.matchName == matchName) {
        propTo.push(prop)
      } else {
        dumpPropTree(prop, nestingLevel + 1, matchName);
      }
      if (propIndex == countProps) return
    }
  }
  return propTo;
}
に投稿

テキストアニメーターの範囲セレクターのオフセットにsetValueできない

var animator1 = selectedLayer.Text.Animators.addProperty("ADBE Text Animator");
var selector1 = animator1.property("ADBE Text Selectors").addProperty("ADBE Text Selector"); // 範囲セレクターを追加
selector1.advanced.units.setValue(2) // 高度タブの単位を一旦「インデックス」に
selector1.property(6).setValue(comp.time, 0) // オフセットにsetValue
selector1.advanced.units.setValue(1) // 「パーセント」に戻す

範囲セレクターの高度タブの単位を「インデックス」にしてやるとできた。あとで「パーセント」に戻せばOK。

に投稿

画像ファイルをバイナリ化してjsxbinに埋め込み

var f = File("画像ファイルパス");
f.encoding = 'BINARY'
f.open('e');

var binary;
binary = f.read().toSource();

var myFile = new File("~/Desktop/binaryOutput.txt");
myFile.open("w");
myFile.encoding = "UTF-8";
myFile.write(binary);
myFile.close();

$.writeln(binary);

f.close();

上記を実行すると出てくるファイルを開いて (new String(“この部分”) をコピー。コピーしたバイナリを変数に格納。画像ファイルのパスを入れるところにぶち込めば表示される。

これ画像だけじゃなくて ffx とかもバイナリ化して埋め込める気がする。。。jsxbinファイル一個だけ渡すスクリプトかっこよい。

参考 : https://youtu.be/CVvdykFNXAY

追記 : これ使ったほうが早い。https://scriptui.joonas.me/

に投稿

スクリプトで独自のパラメータを持つエフェクトを適用する方法

スライダー制御アホみたいに何個もあったらダサいし使いづらい。一つのエフェクトにまとめたい。

ググりまくった結果 pseudo effect とかいうワードにたどり着いた(疑似エフェクトって意味らしい)これでいけそう。

以下流れ

  1. PresetEffects.xml にお好みのパラメーターの疑似エフェクトを追加する
  2. スクリプトの addProperty で適当なレイヤー(なんでもいい)にさっきの疑似エフェクトを適用
  3. アニメーション > アニメーションプリセットの保存 でエフェクトを ffx ファイルに保存する
  4. PresetEffects.xml からさっき追加した部分を削除(本来このファイルはあまりイジらない方がいいみたいなので)
  5. ScriptUI Panels 内にスクリプトの名前のフォルダを作ってさっきの ffx ファイルを持ってくる
  6. スクリプトから applyPreset で ffx を適用

PresetEffects.xml を編集した後は AE 再起動しなきゃダメ。

疑似エフェクト作るときは matchname=”Pseudo/hogehoge” みたいに Pseudo/ って付けたらいいっぽい。

なんか ffx をバイナリー化するチュートリアルとか出てきたけど別にそんな工程いらないと思う。