GG 文解というAEのスクリプトの生い立ちを解説する。
閉じる
閉じる

GG 文解というAEのスクリプトの生い立ちを解説する。

2019-12-30 23:01

    先日、11月2日にとあるスクリプトを作りました。
    11月2日は先日ですよね。ええ。私の基準では先日。

    AfterEffectsという映像制作ソフトを普段私は使っています。
    そして私はそのソフト用のスクリプト「GG 文解」というスクリプトを作りました。
    https://twitter.com/gummasimedi/status/1190626096036773888
    ありがたいことに沢山の方々に使って頂けているようで、最近aescriptsという海外のスクリプト販売サイトに無事肩を連ねる事も出来ました。
    https://aescripts.com/gg-bunkai/
    ありがとうございます。

    今回はこのスクリプトの生い立ちをちょっと解説してみたいと思います。
    アルゴリズムだけではなく、私がどのようにして完成させたかという制作のプロセスも解説します。
    今後のAEスクリプト制作者さん達の手助けになればなあという気持ちが半分、誰かが「もっと早いアルゴリズムみーつけた!」とか言って高速版を作ってくれないかなあという気持ちが2割、「最近また制作何もしてないのでここらでお茶を濁すか―」という気持ちが3割となっております。
    また、ここから先すぐに本題なので、AEワカラン!スクリプトワカラン!な人はあんまり面白い記事ではございません。


    まず紹介。
    このスクリプトは何が出来るのかというと、テキストをシェイプレイヤーにして、構造ごとに分解する能力があります。例えば「仏」という漢字を分解すると、パーツ的には「イ」と「ム」というパーツに分かれてくれるわけです。
    そしてその際穴が開いているパーツは、きちんと正しく結合するという機能を持っています。「口」を分解しても、口という漢字を構成するシェイプパスである四角形二つに分かれず、小さいほうの四角形は穴であると認識して、結合してくれるわけですね。
    ま、実際に使ってみればどういう事か分かるかと思います。無料ですので。


    じゃ、本題。
    機能は分かったけど、それを具体的にどう実装してるの?という話です。
    プログラムの実際の文章は「jsxファイル頑張って読んで♡」という感じですが、要所要所で実際に私が使ったコードも書くので、思い出話だけにはならない予定です。

    まずは目次です。
    今解説記事を作っているから目次にまとめるわけですが、実際にコーディングする時も「何を実装すべきか」を全部書き出せば、それを頭で覚えなくてもよくなって別の事が考えられるようになるので仕様書を書くことをお勧めします。

    さて、テキストをシェイプにして構造分解するための処理は大きく分けると以下の三つでしょうか。
    1テキストレイヤーをシェイプレイヤーにする
    2シェイプレイヤーのパスを構造ごとにまとめる。
    3構造ごとにまとめたグループを1レイヤーずつに分離する。
    最初は深く考えずこんなところからでよいです。ここからどんどん手段を掘り下げて処理に到達しましょう。

    と言っても、1はもう既にコードを書ける処理ですね。ここから片付けましょう。
    結論から言うと、ExtendScriptでは「テキストをシェイプに変換」という関数はありません。これは私も調べても分からず有識者に訊いて教えて貰った知識なので速攻答えを書きますが
    app.executeCommand(3781)
    って書きます。
    これは何をしているかと言うとアプリケーションのコマンド、メニュー項目を直接叩くプログラムです。3781というコマンドIDが、AEのメニュー上に表示される「テキストをシェイプに変換」という項目に該当するわけです。
    このIDの探し方もちゃんとあるのですが、実はもう使えません。
    app.findMenuCommandId("項目名");とすると項目名に該当する機能のコマンドIDが帰ってくるのですが、AE2020で試したところ既にプロテクトが掛かり、何を検索しても0が返ってきます。
    私のスクリプトは実はコマンドIDが変わると即お陀仏という代物だったのでした。誰か助けて。
    追記:どうやらapp.findMenuCommandIdは日本語が通らないだけのようです。やったね!英語版で調べればわかるよ!

    じゃあ私がほぼ何もしてない所はこんなもので、次の記事で機能2の生い立ちに行きましょう。
    広告
    コメントを書く
    コメントをするには、
    ログインして下さい。