終了

AEスクリプトで、選択した複数のコンポ内のレイヤーの位置をまとめて調整したいです。

Community Beginner ,
Oct 07, 2018 Oct 07, 2018

リンクをクリップボードにコピー

コピー完了

AEのスクリプトで、プロジェクトパネル内のコンポ(複数)を選択し、選択したコンポ内のレイヤーの位置(キーフレーム付き)をまとめて調整するような

スクリプトを作成したいのですが、スクリプトの作成を教えていただきたいです。

なにとぞよろしくお願いいたします。

表示

4.8K

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines

correct answers 1 件の正解

Community Expert , Oct 08, 2018 Oct 08, 2018

setValueAtKey で検索したところ、下記のフォーラムにレイヤー単位で位置の値を再設定するスクリプトが投稿されていたので、お試しください。

https://forums.creativecow.net/docs/forums/post.php?forumid=227&postid=27135&univpostid=27135&pview=t

<追記>

一括処理までは、できませんでしたが、アクティブなコンポジションの全てのレイヤーに適用できるようにしてみました。

(特定のレイヤーを選択することはできません)

var n = app. project. activeItem. numLayers;

var iLayer;

for (iLayer=1;iLayer<=n;iLayer++) {

     var myLayer = app.project.activeItem.layer(iLayer);

     var myProp = myLayer.property("Position");

     var curVal;

  if (myProp.numKeys > 0){

  for (va

...

投票

翻訳

翻訳
Community Expert ,
Oct 07, 2018 Oct 07, 2018

リンクをクリップボードにコピー

コピー完了

スクリプトではありませんが、ヌルオブジェクトを使う方法はどうでしょう。

ヌルオブジェクトを1個作成してから、移動させるレイヤー全てを選択、レイヤーの横にある「親とリンク」の項目を「ヌル」に設定します。

ヌルを移動させるだけで、全てのレイヤーが移動します。

コンポジション単位での編集ですが、作業は数分で終了すると思います。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Oct 07, 2018 Oct 07, 2018

リンクをクリップボードにコピー

コピー完了

ご回答ありがとうございます。

残念ながら、「ヌル」や、「あらかじめ位置変更用にプリコンポ」をしておくなどのやり方ができない理由があり、どうしてもスクリプトでやる必要があるのです。

理由についてですが、私はゲーム業界にて、CGデザイナーをしております。AEでキャラクターなどが上から下に移動して画面INする素材を作成しAEで保存、そのAEをプログラマーへ渡してゲームに組み込んでいただいたいるのです。

(その際、あくまでキャラクターの動き素材作成としてキーフレームにて動きを付けているので、親子付けしてしまうとプログラマーがデータを吸い出せないそうなのです)

今回も、100個近くキャラクターが上から下にINする動きを作成した後で、クライアント様から、座標を左上にずらしてほしいといった要望がありました。ゲームのインターフェースはクライアント様が頻繁に変更をかけてしまうので、動きを作った後に簡単に変更できるスクリプトがあれば作業時間が大幅に短縮できるのです。

なので、どうしてもスクリプトにてやる必要があるので、やりかたを知っている方がいらっしゃったら教えていただきたいです。

以上です、なにとぞよろしくお願いいたします。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Oct 07, 2018 Oct 07, 2018

リンクをクリップボードにコピー

コピー完了

事情があったのですね。

スクリプトについては助言できませんが、キーフレームをベイクしてもよければ、下記のツールを使って、複数のレイヤー同時にエクスプレッションの追加とキーフレームに変換後のエクスプレッションの削除を行えます。

Expressionist - aescripts + aeplugins - aescripts.com

エクスプレッション追加の前に、最初と最後のフレームへ キーを作成する必要があると思います。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Oct 08, 2018 Oct 08, 2018

リンクをクリップボードにコピー

コピー完了

大変恐縮なのですが、「スクリプトで一括処理を行える」がマストです。

細かい作成ルール(会社の縛り)に関しての説明は割愛させていただきますが、

エクスプレッションにした後、キーフレーム変換というのも分け合ってNGなのです。

なので、スクリプトにて「一括で選択したコンポ内のレイヤーの位置キーフレームに、任意の数値を加算」を求めております。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Oct 08, 2018 Oct 08, 2018

リンクをクリップボードにコピー

コピー完了

setValueAtKey で検索したところ、下記のフォーラムにレイヤー単位で位置の値を再設定するスクリプトが投稿されていたので、お試しください。

https://forums.creativecow.net/docs/forums/post.php?forumid=227&postid=27135&univpostid=27135&pview=...

<追記>

一括処理までは、できませんでしたが、アクティブなコンポジションの全てのレイヤーに適用できるようにしてみました。

(特定のレイヤーを選択することはできません)

var n = app. project. activeItem. numLayers;

var iLayer;

for (iLayer=1;iLayer<=n;iLayer++) {

     var myLayer = app.project.activeItem.layer(iLayer);

     var myProp = myLayer.property("Position");

     var curVal;

  if (myProp.numKeys > 0){

  for (var i = 1; i <= myProp.numKeys; i++){

  curVal = myProp.keyValue(i);

  myProp.setValueAtKey(i,[curVal[0]+300,curVal[1]+0]);  // X: +300 Y: +0

  }

  }else{

  curVal = myProp.value;

  myProp.setValue([curVal[0]+300,curVal[1]+0]);    // X: +300  Y: +0

  }

}

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Oct 12, 2018 Oct 12, 2018

リンクをクリップボードにコピー

コピー完了

ありがとうございました。

こちらのスクリプトで手作業よりも時間短縮して仕事を行えるようになりました。

ありがたく使用させていただきます。

ご対応いただき誠にありがとうございました。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Oct 15, 2018 Oct 15, 2018

リンクをクリップボードにコピー

コピー完了

<追記 2>

下記サイトのサンプルを使用して、プロジェクトパネルからコンポジションを選択する方法に書き換えてみました。(一括選択)

簡単な動作テストはしていますが、使用される前に試されることをお勧めします。

redefinery.com: Compositions

var items = app.project.items;

var selectedComps = new Array();

for (var i = 1; i <= items.length; i++)

    if ((items instanceof CompItem) && items.selected)

        selectedComps[selectedComps.length] = items;

       

for (var j = 0; j <= selectedComps.length-1; j++)    //コンポジション

{

for (var k = 1; k <= selectedComps.numLayers; k++)  //レイヤー

     {

     var myLayer = selectedComps.layer(k); 

     var myProp = myLayer.property("Position"); 

     var curVal;

  if (myProp.numKeys > 0)

  {

  for (var m = 1; m <= myProp.numKeys; m++)

  {

  curVal = myProp.keyValue(m);

  myProp.setValueAtKey(m,[curVal[0]+300,curVal[1]+0]);  // X: +300 Y: +0

  }

  }else

  {

  curVal = myProp.value;

  myProp.setValue([curVal[0]+300,curVal[1]+0]);    // X: +300  Y: +0  } 

}

}

}

<参考>

余談ですが、先の回答に記載したツールの「Expressionist」にあるスクリプトモードを初めて使ってみましたが、Extendscript Toolkit と比較すると視認性・可読性に優れていて、ESTと同様に編集しながら即座に実行できる機能もついていました。

ae101.jpg

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Oct 21, 2018 Oct 21, 2018

リンクをクリップボードにコピー

コピー完了

最新

様々な心遣い誠にありがとうございます。

試してみましたところ

さらに効率がアップしたと思います。

誠にありがとうございました。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines