ねこまたぎ お道具箱 目次

■掲示板に戻る■ 全部 1- 101- 最新50

何でも質問箱

48 :tetu :06/11/15 16:46:23 ID:hE0h83MI
はじめまして。
AE7のスクリプトについてお聞きします。
やりたい事は、選択されたレイヤーのプロパティを取得しファイルへ出力です。
レイヤーの位置等は以下の処理で取得出来るのですが、選択したレイヤーが
連番のファイル(c00_01_[1-14].bmp)を使用していた場合、下記aiのフレームで使用
しているファイル名を取得する方法が分かりません。
ご指導お願いいたします。

layObj = app.project.activeItem.selectedLayers[0];
ai = layObj.inPoint;
an = layObj.position.valueAtTime( ai, false ) ;<< この時点で使用しているファイルを
取得したいのですが。。。


宜しくお願いします。



49 :kiyo :06/11/16 08:57:43 ID:vHj2ELZk
tetu様 いらっさいまし

なかなか困難そうなオーダーかも。
AEのシーケンスの扱いが問題になりますね。

AE側では(たぶん)統一的なアクセス方法は用意されていませんので
以下のようなルーチンを自分で組む必要がありそうです。

まず、レイヤソースがファイルソースであることを確認します
レイヤがソリッド(平面)やコンポの場合は、ファイルソースが無いので除外です。

var myLayer=app.project.activeItem.selectedLayers[0];
if(myLayer.source.mainSource instanceof FileSource){
//ファイルソースであれば次はファイルの特定
}else{
//フィルソースでない場合の処理
}

ファイルであった場合考えられる状況はまず大きく2つ
静止画ファイルである場合は、ファイルの特定は簡単で単純に mainSource.file プロパティを見る事で解決しますし
ムービーである場合それが単独のムービーファイルであれば、静止画と同じ方法で特定できます。

問題は、質問の通りシーケンスである場合ですが、これはムービーファイルの使用フレームを特定する作業と同じになります。
つづく


50 :kiyo :06/11/16 08:58:16 ID:vHj2ELZk
つづきました
AEでは、シーケンスファイルの第一フレームを代表ファイルとして記録して、連番1増加あたり1フレームのムービーとして
扱ってるはず(経験的にそうなっているとしか思えない)なので、

まず代表ファイルを取得してシーケンスプレフィクスと開始ファイル番号を取得します。

startFileName=Layer.source.mainSource.file.name; プロクシを避けてメインソースオブジェクトを参照
if(startFileName.match(/(.*[^0-9])([0-9]+)(\.[^\.]*)$/))
{
seqPrefix=RegExp.$1;
seqStartNumber=RegExp.$2;
seqPostfix=RegExp.$3;
}
;//プレフィクス、開始番号、ポストフィクスを拾い出す。

で、タイムから数値部分を計算

currentNumber=seqStartNumber+Math.floor(ai/myLayer.source.frameDuration);

あとは、組み合わせてファイル名を作成

myFileName=seqPrefilx+currentNumber+seqPostfix;

…ってとコでしょうか?こんな方法しか無いような気がしますね。


あと実用的には、0をそろえて桁番あわせとか、タイムリマップしていた場合の元フレームの取得とかも必要ですね。
なかなか大変そうです。がんばってください。


51 :tetu :06/11/16 12:07:52 ID:uugoaNME
kiyo様、回答有り難うございます。
細かいソースまで乗せていただき感謝です。
ファイル名の生成さえ出来れば、今回の問題は解決できそうです。
ファイル名の生成が駄目でも1フレーム1連番の法則がはっきりしたので
連番を添付して、何とか出来そうです。

ついでに質問ですが
>AEでは、シーケンスファイルの第一フレームを代表ファイルとして記録して、
>連番1増加あたり1フレームのムービーとして
>扱ってるはず(経験的にそうなっているとしか思えない)
コンポの場合も基のコンポを連番1増加あたり1フレームとして扱っている様で
すが、あってますか?

矢継ぎ早の質問で失礼します。
AE7.0の1ヶ月トライアル版での検証(AEスクリプトで、ある問題をクリア
出来るのか?)なので、宜しくお願いします。


52 :tetu :06/11/16 17:31:14 ID:uugoaNME
こんばんは。

レイヤーを選択後、そのレイヤーに使用しているファイル名、位置などは取得
出来るようにはなりましたが、フレーム上のマーカー名(1とか2とか)を
取得する方法はありますか?
質問ばかりで恐縮ですが、よろしくお願いします。


53 :kiyo :06/11/17 03:06:54 ID:51oc7hTs
ハイ、こんばんはです

>コンポの場合も基のコンポを連番1増加あたり1フレームとして扱っている様で
すが、あってますか?

だいたいあってます。
フッテージやコンポのフレームレートが一致している限りそういう扱いで問題ないです…が
フレームレートが一致していない場合は、ケースごとに実時間を参照して変換が行われますので

1.実時間を参照して自前で変換する。
または
2.フレームレートが異なっている場合処理しない。

とかなんとか処置しておいた方が良いかと思います。

>マーカーの名前
名前…と言うかcommentプロパティですね。
マーカーは、他のプロパティと同様にレイヤのプロパティとして扱いますです。
myComment=Layer.property("Marker").keyValue(1).comment;//一番目のマーカーのコメント
myURL=Layer.property("Marker").valueAtTime(1.0,true).url;//1秒めのマーカーのURL

プロパティが保持している値はMarkerValueオブジェクトです。MarkerValueコンストラクタで初期化できます。

myMarker=new MarkerValue("myComment","myChapter","ttp://myURL/","myframeTarget");
Layer.property("Marker").setValueAtTime(1.0,myMarker);
こんな感じ。

でした。

54 :tetu :06/11/17 09:54:22 ID:RQG8hMO6
kiyo様、いつも詳しく教えていただき有り難うございます。

>マーカーの名前
>名前…と言うかcommentプロパティですね。
すいません、コンポジションタイムマーカーの番号を取得したかったのです。。。


以前教えていただいたファイルソースの確認ですが、シーケンスファイルの判別を
下記の様に行っています。
コンポジション等は typeName で判別します。
シーケンスファイルの判別方法でもこのようなプロパティがありますでしょうか?


//ファイルソースの確認
var sLayObj = app.project.activeItem.selectedLayers[0]; // 選択された最初のレイヤー
if( sLayObj.source.mainSource instanceof FileSource ) {

startFileName = sLayObj.source.mainSource.file.name ; // 代表ファイルを取得

// シーケンスファイルかどうかをチェック
if ( startFileName == sLayObj.name )
{
seqFile = false;
} else {
seqFile = true;
}
} else {

//フィルソースでない場合の処理
if( sLayObj.source.typeName == "コンポジション" ) {
alert("コンポジション選択");
}
}

宜しくお願いします。

55 :kiyo :06/11/17 12:48:46 ID:51oc7hTs
どもです

>コンポジションタイムマーカー

ああ、そうですね「番号」ってくらいですから、そっちですね

残念、そちらに関してはスクリプトから操作するオブジェクトは用意されていないモヨウです。
以前探しましたが発見できませんでした。

エクスプレッションからは参照できる様なので、裏技的ですが「タイムマーカー参照用レイヤ」
とかを設置すれば値を取得するだけはできそうですね。

>シーケンスファイルの判別方法
専用のプロパティはないみたいです。アイテム的には「ムービー形式のひとつ」の扱いですね。

私なら、Item.source.isStill と 拡張子(ファイル形式)の組み合わせで判別するあたりでしょうか?
インポート直後(ソース名の変更がない状態)ならば、source.name と mainSource.file.name の比較でも可能ですね。

if((! Layer.source.isStill)&&(Layer.source.name==Layer.source.mainSource.file.name)){
//名前が一致しているのでアイテムはムービーファイル(単独ファイル)
}else{
//アイテムはシーケンスファイル(複数ファイル)
}
ソース名が変更可能なので一般性はないです。
なにか他にあると良いですが…

でした。

56 :tetu :06/11/17 13:12:47 ID:RQG8hMO6
kiyo様、回答有り難うございます。

>残念、そちらに関してはスクリプトから操作するオブジェクトは用意されていないモヨウです。
>以前探しましたが発見できませんでした。
そうですか。残念。

>インポート直後(ソース名の変更がない状態)ならば、source.name と mainSource.file.name の
比較でも可能ですね。
なるほど、ソース名の変更が無い事が条件ですね。

いろいろ有り難うございます。

62KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail(省略可)

0ch BBS 2004-10-30 (+Nekomataya/2005-02-17)