Pages

2013年12月25日水曜日

MERRY CHRISTMAS!



気がついたらまたいつもの放置グセが…

以前まとめたスクリプトが思いの外ご好評頂き、今でも(!)一日2,3ダウンロードされてるようです。
ありがとうございます。

あれの修正版とか、ちょっとテクニカル寄りなことでも書きたいのですが、如何せん如何にせん…
が、頑張ります。

さて、今日は2013クリスマスということで毎度の午前様帰宅後にちょっと写真撮ってみました。
結果はまあ…
映像は何事もそうですが、レイアウトとライティングは本当に大事!という反例みたいになっちゃいました。(被写体の可愛さでごまかすのはいつもの通り)

これに懲りず、また色々ボチボチ頑張ります。
では、良いクリスマスと年末を!

2013年7月23日火曜日

twitter用ネタまとめ

前回書いたスクリプトが2ヶ月近く経った最近でも日に2,3件ダウンロードされているようで、多少なりとも参考になっているのであれば幸いです。

その1と題したからには”その2”も書かないとなあ、と思ってたり、その1の粗も見つけたりで、スクリプトネタを続けたい所でもあるのですが、今回はちょっと趣向を変えて、普段は社内TumblrやTwitterに見つけた端から流している面白映像ネタをまとめてみました。

7月に入ってから、平日は通常仕事こなしつつ、土日で別件の劇場版に参加してたりと忙しくてなかなかネタ元のRSSチェックも出来ず(GoogleReader停止の影響も地味にあったり…)。
その辺ご無沙汰してたのですが、お仕事一段落して色々見返してたらこのままスルーしてしまうのも勿体無いネタが結構あったので、こんな感じのお試し企画です。

特に脈絡とか気にせず、見つけた順に羅列してあります。気になるものは是非本家でどぞ。

------------------------------------------------------------------------------------------------
◆Apple - Designed By Apple - Intention
 
確か制作はBuckだった…ハズ


◆Franchise Animated - Promo

Franchise Animated - Promo from Animography on Vimeo.
文字のアニメーションが楽しい。CNのIDとかに使いそう。

◆Honda - "Hands"

Honda - "Hands" from Analog on Vimeo.
制作は流石のW+KLondon.妙な存在感がある。

◆Travis - Moving

制作はMPC。何とびっくりのリアルタイム作品なんだそうな。
メイキングも是非。

◆Night Stroll

Night Stroll from tao tajima on Vimeo.
シンプルだけどカッコいい。

◆Mun2 pop!

Mun2 pop! from 2veinte on Vimeo.
作画のMotionGraphicsが大好きなのです。

◆Cuushe - Airy Me

Cuushe - Airy Me from flau on Vimeo.

時間をかけて膨大な作画をこなしているから凄いのではなく(それはそれでとても凄いことだけど)、その作画が生み出す粘り強いイマジネーションがとんでもない作品。


あと、アニメ作品をいくつか。

◆Bee and PuppyCat Part 1
 
デザインはとても可愛いのだけど、この枠(Cartoon Hangover)は正直良くわからない。
コレとかも。

◆DC Nation Short - "Wonder Woman" Preview

Gorillaz, Tron UprisingとかのRobert Valley作品。この人のデザインは独特だなあ。

◆DC Nation - The Bat Man of Shanghai





功夫料理娘で一躍名を馳せた(?)上海WOLF SMOKE STUDIOによるBatman.
モブとか、小ネタ挟むの好きだなあ…

Batmanといえばこんなのも。
 
最近どこかで見たと思ったらアレだ。と思ってたら早速スカポン太さんが記事にしてた。


アニメネタの最後に。


KorraのBook2ということで(Book1が届いたばかりですが)とても楽しみです。
何とか、日本の地上波でOAできないものだろうか…


最後に、幾つか気になった記事をご紹介。

中国劇場版アニメ「大魚·海棠」 が点名時間(中国版Kickstarter)での目標額を達成

この「大魚·海棠」、色彩や各種デザイン、CGの使い所など結構見所多いと思うのですよね。
コメントにもありますが、日本での劇場公開は流石に厳しいとしても、せめてメディアとして視聴可能にならないものかしらと。

もう一つちゃにめ!さんから。
韓国の劇場版アニメ 「千年狐ヨウビ(五尾狐)」のDVDを買ったので観てみました

こちらもルックはなかなかイイ感じだし、CGも(2007年ということを考えれば更に)上手い具合に落とし込んでいると思うのですが、どうなんでしょう。
お話はさっぱり分かりませんが、優比は日本でもそこそこ可愛いキャラとして受け入れられそうな気がします。
韓国はアニメ制作という点では最近元気な中国に押し負けている感がありますが、文化の輸出には積極的なようですし、アニメ作品ももっとアピールしてくれても良いのではないかな、と思います。


写し身(ezBlog)
「やっぱり、産みの苦しみを、中枢のスタッフは引き受けないと、ダメなんでしょう。作業の苦しみ以上の、産みの苦しみを。」
自分があとどれくらい、産みの苦しみを引き受けられる機会を得られるか。自他の要因諸々から、そんなにチャンスは多くないんだろうなあ、というのが正直なところ。

アニメ内ミュージカルの考察(ReadMe!Girls!の日記・雑記)
なかなか興味深い考察。ショーかドラマか、という点は大きいのかも。日本でショーと押してアニメを作っている例はかなり少なそう。
実写にまで広げれば、昔(さすがにリアルタイムではないけど…1950-60年代辺りとか)は結構ミュージカル仕立ての作品あった気もします。

2013年上半期ラノベ周辺総括
もうすっかり未知の領域となりつつありますが…よくまとめられているようなので、参考にどれか手をつけてみようかと。


------------------------------------------------------------------------------------------------
以上、こんな感じで。

すっかりいつものTwitter的ノリになってしまいましたが、コレはコレで結構楽しいかも。
ああいうフロー型システムだと、どうしても後から省みることが難しいので、ある程度ざっくり区切ってこうしたストック型にまとめていくのもありなのかもしれません。

そんなこんなで、今後も突発的にスクリプトネタや写真ネタやこうしたまとめネタなどを上げて行きたいと思います。

2013年5月23日木曜日

お手軽AEスクリプト(その一)

書いた本人も半分忘れていたこのブログですが、気がつけば1年以上更新していなかった…となると急に気になりだすのが人情というもの、ひと月ぶりにお休み貰ったことだし、何か書いてみることにしました。

と、ちょうど手元に良いネタがあったので、今回はコレをご紹介。先日社内で別チームのスタッフに頼まれて作った、After Effects用単機能スクリプトです。
わずか数十行とネタとしても手頃ですし、春の新番ラッシュを乗り越え、5月病をクリアし、そろそろスクリプトにでも手を出してみようかな~という殊勝な業界若人のヒントにでもなるかな?と。
ある程度書ける人には今更な内容かと思いますが、まあ、こんなもんでも役に立つんだよ、という事例紹介みたいなノリで行きたいと思います。


◆その1:指定エフェクトを使用しているレイヤー一覧を書き出す ”searchFx.jsx"
短いのでそのまま書いてみます。

(function(){
    // ---------------------------------------------------
    var p=app.project;
    var txt="";
    var idx=1;
    // ---------------------------------------------------
    if(p.file.exists){
        var defaultPath=p.file.parent.fsName+"/";        
        main();
    }else{
        alert("プロジェクトを保存してからスクリプトを実行して下さい");
    }
    // ---------------------------------------------------
    function main(){
        var tgtFxName=prompt("検索するエフェクト名を入れて下さい 完全一致オプションは「^プラグイン名$」", "プラグイン名");
        var result="";
  if(tgtFxName!=null){
   for (var i=1; i<=p.numItems; i++){
    if(p.item(i) instanceof CompItem){
     result=searchFxLayer(p.item(i), tgtFxName); 
    }
   }
   dumpTxt(result, tgtFxName);
   alert("完了しました!(`・∀・´)"+"\n"+defaultPath+" 直下を確認して下さい");
  }
    }
    //
    function searchFxLayer(tgtComp, srcStr){
        for(var j=1; j<=tgtComp.numLayers; j++){
            var tLayer=tgtComp.layer(j);
            if(tLayer.matchName!="ADBE Camera Layer" && tLayer.matchName!="ADBE Light Layer"){
                var m=tLayer.property("Effects").numProperties;
            
                for(var k=1; k<=m; k++){
                    if(tLayer.effect(k).name.match(srcStr)!=null){
                        txt=txt+"\n"+idx+" :使用コンポ名: "+tLayer.containingComp.name+" // 使用レイヤー名: "+tLayer.index+" ; "+tLayer.name;
                        idx=idx+1;
                    }
                }
            }
        }
        return txt;
    }
    //
    function dumpTxt(rslt, sfxn){
        var logObj=new File(defaultPath+"searchResult_"+p.file.name.split(".")[0]+"_"+sfxn.replace(/\s| /g,"")+".txt");

        if(logObj.open("w")){
            logObj.writeln("<<< 検索対象プロジェクト名:"+decodeURI(p.file.name)+"   /   検索対象エフェクト名 : "+sfxn.replace(/\s| /g,"")+" >>>");
            logObj.write(rslt);
            logObj.close();
        }else{
            alert("ログファイルを開けませんでした");
            return;
        }
    }
})();

こんな感じで。
順に見えてもらえばやっていることはまあ分かるかと思いますが、一応簡単な解説をば。


◆その前に
まず大前提として、このスクリプトではログとしてテキストファイルを書き出すのでAE側で「編集」⇒「環境設定」⇒「一般設定」⇒”スクリプトによるファイルへの書き込みと~”にチェックを入れておく必要があります。


* * *
では頭から
1行目、及び最終57行目で使用している”(function(){})();”は、所謂無名関数というものです。要は変数のスコープをこの内側に限定する目的で使用されてます(たぶん)。

7行目で、実行時のプロジェクトがファイルとして保存されているか否かを以下のスクリプト実行のスイッチとしています。プロジェクトファイルが存在すれば、そこからファイル名やプロジェクトファイルがあるフォルダパスなど様々な情報を取得出来ます。

14-26行目がメインとなる関数部分。ダイアログで検索するエフェクト名を取得し、その「名前」のエフェクトを使っているレイヤーを、プロジェクト内全てのコンポから洗い出します。
入力されたエフェクト名と、実際にプロジェクト内で使用されているエフェクト名の照会は、正規表現を用いたmatchメソッドを使用しているため、入力時の検索オプションとして(手入力による ><; )前方、後方完全一致オプションを使用できるようになっています。

出来れば、きちんとUIをデザインしてボタンオプションなどで実装したいところですが、AEは非常にUIデザインに向いていないのでとりあえずコレでお茶を濁します。隣でデザイナーがまだかまだかと期待の眼差しを向けてくる状況では、優雅さよりスピードだったりもするのです。


閑話休題。
19行目でプロジェクト内のデータを頭から虱潰しにしていきながらコンポアイテムに当たった場合、そのコンポアイテムと、検索エフェクト名を次の「コンポ内のすべてのレイヤーから、指定した名前のエフェクトを使用しているレイヤーを洗い出す」関数(”searchFxLayer”)に渡します。

この関数も、基本は上の「プロジェクト内のすべてのアイテムから、コンポアイテムを洗い出す」main関数の機能と同じです。

ここで特徴的なのは、31行目の”matchName”と32行目の”property("ADBE Effect Parade")”でしょうか。

”matchName”はAEのUI上で表示される名称とは別にAE内部で各プロパティを認識するための名前で、使用言語による変化が無いため、スクリプトでプロパティを指定する際には(大抵の場合)通常のname属性よりオススメされています。

2つ目の”property("ADBE Effect Parade")”は、エフェクトのmatchNameを使用したエフェクトプロパティへのアクセスで、そのレイヤーの総エフェクト数を取得しています。
(カメラ、ライトオブジェクトはエフェクトを持てないので、ここでは最初に除外している訳です。matchNameを使用することで、カメラ、ライトレイヤーの名前を変更していても抽出に影響ないのがミソです)

この辺りのProperty/PropertyGroup objectについて話しだすと長くなる上に、恐らく僕の手には余るので、既にネット上で詳しく説明されているページを紹介して逃げたいと思います。
After Effectsユーザーのための、プログラミング入門 その7 スクリプト作成補佐スクリプト Property/PropertyGroupについて


さて、気を取り直して、そのレイヤーのエフェクト総数が分かったらまたしても同型の処理、「エフェクトの数だけ総当りで調べて、指定エフェクト名と一致するエフェクトを洗い出す」のが、34-35行目の処理になります。
見つかったら、そのコンポ名、レイヤー名を内部的にメモして、次のエフェクトへ。
一つのレイヤーを調べ尽くしたら、そのコンポ内の次のレイヤーへ、そのコンポ内も全て調べつくしたら、元のmain関数に戻って、プロジェクト内の次のコンポへ…
と渡って、プロジェクト内の全てのレイヤーを調べ尽くします。
人の手と眼だと気が遠くなる上に見逃しもありえますが、機械に任せておけばその心配はありません。エラーも込みで、書かれたとおりに実行してくれます。


最後に、見つけたコンポ名、レイヤー名をメモしたデータを”dumpTxt”関数でテキストデータとして書き出します。
日本語エフェクトに含まれる空白を除去したり(46行目)、日本語ファイル名での文字化けを回避したり(49行目)しつつ、作業完了となります。
完了メッセージの顔文字にイラッとしたら、是非ともエディターを開いてソースを書き換えてしまいましょう。千里の道も一歩から。
* * *


◆post script
スクリプト習得の学習曲線がどのようなものか、まあ人によってそれぞれなのでしょうが、書いてみたら思いがけずいろいろな要素が混在していて、ちょっと学習ネタとしては不適切だったかもしれません。その場合は、遠慮せず職場に一人はいるはずの3度の飯よりスクリプトが好きな人や、勿論僕当てでも構いませんので、質問して頂ければと思います。
仕事中はたいていTwitter(@hachinogy)にいます。あそこの記述が変だ、解説が怪しい、などのツッコミもお待ちしております(どうぞお手柔らかに)。
検索対象を変更すれば、他所から来た巨大なプロジェクトファイルの何処かに、見たこともないフォントを使用した謎のテキストレイヤーが隠れている…なんて事態にも対応出来ますね。


さて、ツッコミが入る前に軽く自己弁護しておきますと、今回のスクリプト、ざっと見た人ならきっと誰もが「何故matchNameでエフェクトも検索しないのか」と疑問に思われたことでしょう。エフェクト名による検索は、エフェクトの名前を変更していた場合効果が半減します。
正確を期すならば、検索時には見慣れたname属性によるエフェクト名を入力してもらい、内部でそれをmatchNameに変換する関数を通すことで可能な限り、matchName検索をかける、というのが最善なのでしょう。
今回は、たまたまデフォルトのエフェクト名を変更していなかったパターンだったので、実装速度最優先ということで上記のような内容になったまでです。
ちょうど”hiroshisaito.net”の斉藤さん(After Effects Plugins matchNames)や”AfterEffects compZero”の吉岡さん(Plugin matchName)がステキなリストを上げてくださっているのを発見したので、自分でもバージョンアップを図りたいと思います。


あ、その1と言っておきながらその2を書くには長すぎた気がするので、分割して次回へ続く…。
次回、「コメントされたレイヤーを削除するスクリプト(”deleteCommentedLayer”)」




一応、ファイルもアップロード。