カテゴリー「あえ」の2件の記事

2012年4月12日 (木)

飛び飛び連番調教その弐。

昨日書いたやつの、ちょっと改良したバージョンです。
ええと、AEで、歯欠け飛び飛びの連番としてインポートされているフッテージを、イッキにアルファベット順にする(つまりちゃんと連続したシークエンスになる)スクリプトです。





JavaScript
------------------------------------------------------------

//    フレームレート入力時のデフォルト値
DefFrameRate = 12;

var aTargetItemsSelected = new Array();
var aTargetItemsAll = new Array();
var oProjectItems = app.project.items;
//プロジェクト内の全アイテム
for ( var i=1; i<=oProjectItems.length; i++ )
{
    var oItem = oProjectItems[i];
   
   
//    フッテージアイテムであり、静止画でないなら、aTargetItemsAllに拉致
    if ( oItem instanceof FootageItem && oItem.mainSource.isStill == false )
    {
        aTargetItemsAll.push( oItem );
       
       
//    選択もされてたら、さらに aTargetItemsSelected にも拉致
        if ( oItem.selected )
        {
            aTargetItemsSelected.push( oItem );
        }
    }
}


//    選択されてるものがゼロなら、aTargetItemsAllが 対象
//    選択されたら、aTargetItemsSelected が対象
//    いずれも aTargetItems に集約

if ( aTargetItemsSelected.length == 0 )
{
    var aTargetItems = aTargetItemsAll;
}
else
{
    var aTargetItems = aTargetItemsSelected;
}


//    集約されたアイテムを処理
if ( aTargetItems.length != 0 )
//ゼロじゃなければ処理
{
    NewFrameRate = prompt( "フレームレート入力汁", DefFrameRate );
    if ( NewFrameRate )
    {
        NewFrameRate = parseFloat( NewFrameRate );
       
        ResultCount = 0;
        for ( var i=0; i<aTargetItems.length; i++ )
        {
            FuckinReplace( aTargetItems[i], NewFrameRate );
            ResultCount ++;
        }
        alert( "処理したフッテージの数は " + ResultCount + " だそうです。" + "\r\n" + "フレームレートは " + NewFrameRate + " にしたそうです。" );
    }
    else
    {
        alert( "ゴルァ" );
    }
}
else
    //    ゼロなら脅す
{
    alert( "処理対象アイテムが無いのでセーブせずに今すぐマシンをシャットダウンします。慌てて下さい。" );
}


//    差し替え & フレームレート設定
function FuckinReplace( oFootage, NewFrameRate )
{
    var oFile = new File ( oFootage.file );   
//    FootageItem.file = ファイルパスだそうですがほんとですか。
    oFootage.replaceWithSequence( oFile, true ); 
//    第2引数 = アルファベット順  というのは真実ですか。
   
   
//    フレームレートに文字とか変なもの入力していたら NaN になっているので、その場合は元のフレームレートを変更しない
    if ( !isNaN( NewFrameRate ) )
    {
       
//    FootageItem のフレームレートをいじる時は mainSource オブジェクトの conformFrameRate をいじれって死んだばあちゃんが言ってた。
        oFootage.mainSource.conformFrameRate = NewFrameRate;
    }
}

------------------------------------------------------------

ダウンロード ToviToviRengbangChowkyow2.jsx (2.6K)




・フッテージを選んでいた場合、そのフッテージのみが処理対象になるようにした

・何も選んでなければ、プロジェクト内の全フッテージが処理対象になるようにした
(いずれも、連番フッテージのみ)

・フレームレートを入力するようにした



とかなんとか。

昨日のバージョンより確実に使いやすい。
2コマ打ちの素材と1コマ打ちの素材が混ざったプロジェクトで、昨日のだと、1コマ打ちの素材まで2コマなフレームレート( 12fpsとか )に変えられてしまっていましたので。

最初にフレームレートの入力を促されますが、ここで数値ではなく文字列など変なものを入力すると、フレームレートは元のまま変更されません。

数値しか受け付けない入力ダイアログとかって、できるのかな。 XSI なら、例えば整数型で作ったパラメータは小数点も入力できなくなっているし、もちろん文字列も入力できないじゃないですか。それと同じこと、AE のスクリプティングでもできるのかなーと。 知っているお方はなにとぞ教えて下さい。






ふう。
少しずつ書いている。
少しずつ前進してますが。
なんだかな。

AE で取得した配列って、1スタートなんですねえ。
なんでやねん。

でも自分で配列作ったら、当然 0スタートなんですよね。
ええい面倒だ。
これに気付かず、俺などは、なぜ動かないどこも間違ってねえぞゴルァとジタバタするわけですよ。


うーむ、やはり AE のSDK はアレだと思うんですよ。
SDKマニュアルもなんか古いのしかないし、
記述も非常にわかりにくい。
必要なオブジェクト、プロパティ、メソッドもあまり用意されてないように見える。




XSI様を見習え。



いや見習うな。












.

| | コメント (2) | トラックバック (0)

2012年4月11日 (水)

飛び飛び連番調教。

いきなり AfterEffects ネタなんですがね。



XSI で言う Step 2 とかの連番、つまり 1, 3, 5, 7・・・・という番号が飛び飛びになっている連番ファイルって、AE にインポートしにくいですよね。 ドラッグ&ドロップだと連番が歯欠けだぜゴルァと怒られるし、インポートのダイアログからも 「アルファベット順にする」 とかチェック入れてやらないとつながった連番として認識してもらえない。 そもそも、インポートのダイアログ使っちゃうとたくさんのフォルダを訪問しなくてはいけない。ドラッグ&ドロップのようにイッキにインポートできなくてめんどくさいですよね。



Aealert

ほんと、殺意を覚えます。


インポートでエラーが出てもダイアログを出さずに無視する、というようなオプションが無いというのが許せません。 これに限らず、AE ってのは、人間様が常にそこにいて、マウス操作とかOK押すという行為をするということを前提に作られているんですよね。バッチ処理があまり考えられてないというか。 昔はステキなソフトウェアだと思っていたんですが、使えば使うほど、ディスりたくなります。まるで XSI 様のようです。 ま、XSI 様のことは昔からディスっていましたけどね。それこそ、SI|3D の時代から。






ともかくですね、飛び飛び連番は面倒なのです。

でも、番号が飛び飛びになっていない、詰めた連番素材にはしたくないわけです。 第1の理由は、XSI と AE でタイムラインを一致させたいからです。 管理上の問題です。

また、連番の一部をレンダし直す時に、レンダし直すフレームのファイルだけを削除して、あとは勝手に XSI に存在しないフレームを探させてレンダしたりするので、やはり、XSI シーンのタイムラインと一致しているのが一番ラクです。


なので AE のインポート側でどうにか便利にならんものかと思ったんですよね。 おそらくアニメの撮影屋さんなんかは、こういう便利なスクリプトを大量に持っていたりするんでしょうけどね。




ま、ともかく、最低限のものを自作しました。

AE のスクリプティングはまだよくわかりません。
かなりアヤシイですが、ひとまず、俺が使う狭い範囲の中では、思った通りに動いてくれているように見えます。


実行すると、現在開いているプロジェクトのうち、連番素材を全部、アルファベット順の連番として差し替えます。 静止画はスキップされます。されるはず。されてくれ。

つまり、インポートをラクにするのではなく歯欠けの飛び飛び連番としてインポートされている悪い子のフッテージをアルファベット順に調教するというものです。 

なので、ドラッグ&ドロップでインポートした時にいちいち出るファッキンなアラートから逃れられるスクリプトではありません。  ドラッグ&ドロップしたのなら、次々に出るアラートをOK押して行かなければいけないのは、同じです。 このスクリプトはインポートの手順とは全く関係ないです。あくまでもインポート後の処理をするスクリプトです。  まあ、まずは最低限からです。 いずれ改良するでしょう。 



JavaScript
----------------------------------------------------------------------

// フレームレートは手で書き換えるのです
NewFrameRate = 12;
FootageCount = 0;

//    プロジェクト内の全アイテムをループしてるとかなんとか。
var oProjectItems = app.project.items;
for ( var i=1; i<=oProjectItems.length; i++ )
{
   
//    それが FootageItem とかいう野郎だったら拉致する。
    if ( oProjectItems[i] instanceof FootageItem )
    {
        var oFootage = oProjectItems[i];
      
//    静止画かどうかの判別は mainSourceオブジェクトの isStill で可能だと電波が言っているのですが、合ってますかこれ。
        if ( oFootage.mainSource.isStill == false )
        {
            FuckinReplace( oFootage, NewFrameRate );
            FootageCount ++;
        }
    }
}
alert( "処理したフッテージの数は " + FootageCount + " だそうです。" );

//    差し替え & フレームレート設定
function FuckinReplace( oFootage, NewFrameRate )
{
    var oFile = new File ( oFootage.file );   
//    FootageItem.file = ファイルパスだそうですがほんとですか。
    oFootage.replaceWithSequence( oFile, true ); 
//    第2引数 = アルファベット順  というのは真実ですか。

 //    FootageItem のフレームレートをいじる時は, frameRate じゃダメで、
    //    mainSource オブジェクトの conformFrameRate をいじれって死んだばあちゃんが言ってた。

    oFootage.mainSource.conformFrameRate = NewFrameRate;
}


----------------------------------------------------------------------

ダウンロード ToviToviRengbangChowkyow.jsx (1.4K)




全部の連番が対象になってしまいますので注意です。
 
もともと歯欠けではなかった連番さえも、一緒くたに、分け隔てなく、平等に、アルファベット順の連番として置き換えられます。 俺としては特に不都合無いのでひとまずこうしています。



アルファベット順の連番にすると、AE 内での連番の表示の仕方が変わりますね。

アルファベット順ではない連番は、
Renban1
こういう表記ですが、


アルファベット順にすると、
Renban2
こうなりますね。


まあ、スッキリして見やすい気もするし、でもソース名から連番のスタートエンドが分からなくなるのは嫌かも知れないですね。 しばらくこれで様子を見て、問題あらば改良しましょう。



飛び飛び連番のフレームレートは、コンポのフレームレートと一致しない場合が多いのではないかと思います。 コンポは 24fps で、連番は Step 2 なので 12fps としてインポートしたいとか、そういう場合が多いですね。 なのでアルファベット順として読み込み直したフッテージには、新たにフレームレートを指定してやってます。 ひとまず、スクリプトの冒頭に 12 という数字を書いちゃってます。 変更したいときはここを書き換えるしかありません。 XSI の PPG のようなものを表示させてその都度フレームレートを入力するような仕様にしてもいいと思うんですが、俺の AE スクリプティング能力はまだそこまで行っていません。 いずれ。






スクリプトファイルは

C:\Program Files (x86)\Adobe\Adobe After Effects CS4\Support Files\Scripts

とかに入れておくと、ファイルメニュー > スクリプト に現れるので、いつでも実行できますね。 でも、ここに現れる名前って、変えられないのかな。 ファイル名と同一になってしまうのは、不便ですね。

もちろんここに入れなくても、ファイルメニュー > スクリプト > スクリプトを実行 からその都度ファイルを選んでもいいんですけどね。




Windwos7 64bit 上で、AECS4 で動作確認しました。
CS5 でも動くのかな。 後で試そう。




そのうち、選んでいるものだけを処理対象にするとか、改良すると思います。 まず最初は最低限から。

ドラッグ&ドロップを検知して、そのときにこのスクリプトを走らせるとか、できないのかな。 うーむ、できなさそうだよな。 AE 様だからな・・・。





それにしても AE のスクリプティングは、すげえやりにくいなあ。

XSI 様の方が遥かに良く見える。

おかしいなあ。






.

| | コメント (0) | トラックバック (0)