リンクをクリップボードにコピー
コピー完了
AEのスクリプトで、プロジェクトパネル内のコンポ(複数)を選択し、選択したコンポ内のレイヤーの位置(キーフレーム付き)をまとめて調整するような
スクリプトを作成したいのですが、スクリプトの作成を教えていただきたいです。
なにとぞよろしくお願いいたします。
setValueAtKey で検索したところ、下記のフォーラムにレイヤー単位で位置の値を再設定するスクリプトが投稿されていたので、お試しください。
<追記>
一括処理までは、できませんでしたが、アクティブなコンポジションの全てのレイヤーに適用できるようにしてみました。
(特定のレイヤーを選択することはできません)
...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
リンクをクリップボードにコピー
コピー完了
スクリプトではありませんが、ヌルオブジェクトを使う方法はどうでしょう。
ヌルオブジェクトを1個作成してから、移動させるレイヤー全てを選択、レイヤーの横にある「親とリンク」の項目を「ヌル」に設定します。
ヌルを移動させるだけで、全てのレイヤーが移動します。
コンポジション単位での編集ですが、作業は数分で終了すると思います。
リンクをクリップボードにコピー
コピー完了
ご回答ありがとうございます。
残念ながら、「ヌル」や、「あらかじめ位置変更用にプリコンポ」をしておくなどのやり方ができない理由があり、どうしてもスクリプトでやる必要があるのです。
理由についてですが、私はゲーム業界にて、CGデザイナーをしております。AEでキャラクターなどが上から下に移動して画面INする素材を作成しAEで保存、そのAEをプログラマーへ渡してゲームに組み込んでいただいたいるのです。
(その際、あくまでキャラクターの動き素材作成としてキーフレームにて動きを付けているので、親子付けしてしまうとプログラマーがデータを吸い出せないそうなのです)
今回も、100個近くキャラクターが上から下にINする動きを作成した後で、クライアント様から、座標を左上にずらしてほしいといった要望がありました。ゲームのインターフェースはクライアント様が頻繁に変更をかけてしまうので、動きを作った後に簡単に変更できるスクリプトがあれば作業時間が大幅に短縮できるのです。
なので、どうしてもスクリプトにてやる必要があるので、やりかたを知っている方がいらっしゃったら教えていただきたいです。
以上です、なにとぞよろしくお願いいたします。
リンクをクリップボードにコピー
コピー完了
事情があったのですね。
スクリプトについては助言できませんが、キーフレームをベイクしてもよければ、下記のツールを使って、複数のレイヤー同時にエクスプレッションの追加とキーフレームに変換後のエクスプレッションの削除を行えます。
Expressionist - aescripts + aeplugins - aescripts.com
エクスプレッション追加の前に、最初と最後のフレームへ キーを作成する必要があると思います。
リンクをクリップボードにコピー
コピー完了
大変恐縮なのですが、「スクリプトで一括処理を行える」がマストです。
細かい作成ルール(会社の縛り)に関しての説明は割愛させていただきますが、
エクスプレッションにした後、キーフレーム変換というのも分け合ってNGなのです。
なので、スクリプトにて「一括で選択したコンポ内のレイヤーの位置キーフレームに、任意の数値を加算」を求めております。
リンクをクリップボードにコピー
コピー完了
setValueAtKey で検索したところ、下記のフォーラムにレイヤー単位で位置の値を再設定するスクリプトが投稿されていたので、お試しください。
<追記>
一括処理までは、できませんでしたが、アクティブなコンポジションの全てのレイヤーに適用できるようにしてみました。
(特定のレイヤーを選択することはできません)
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
}
}
リンクをクリップボードにコピー
コピー完了
ありがとうございました。
こちらのスクリプトで手作業よりも時間短縮して仕事を行えるようになりました。
ありがたく使用させていただきます。
ご対応いただき誠にありがとうございました。
リンクをクリップボードにコピー
コピー完了
<追記 2>
下記サイトのサンプルを使用して、プロジェクトパネルからコンポジションを選択する方法に書き換えてみました。(一括選択)
簡単な動作テストはしていますが、使用される前に試されることをお勧めします。
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と同様に編集しながら即座に実行できる機能もついていました。
リンクをクリップボードにコピー
コピー完了
様々な心遣い誠にありがとうございます。
試してみましたところ
さらに効率がアップしたと思います。
誠にありがとうございました。