C++
Plugin
AfterEffects

AfterEffectsSDK 開発開始までのメモ

More than 1 year has passed since last update.

AfterEffectsのPluginを開発するために使うAfterEffectsSDK。
プラグインはたまにしか作らないからやり方をすぐに忘れちゃうので、導入までをメモ。
コンポやレイヤーを弄るプラグインの作成です。エフェクトとかは知らないです。

環境

  • windows7
  • VisualStudio2013
  • AfterEffects CC

SDKのダウンロード

After Effects DeveloperからSDKを入手。
CCなら「Adobe_After_Effects_CC_Win_SDK.zip」
インストーラーではなくzipファイルです。

SDKを解凍してフォルダに入れる

解凍したフォルダ丸ごとそのまま入れます。
僕の場合はとりあえずProgram FilesのAdobeの中に入れました。
C:\Program Files\Adobe\Adobe After Effects CC Win SDK

環境変数にパスを設定

変数名
AE_PLUGIN_BUILD_DIR プラグインを出力する場所

AEのプラグインフォルダにsdkフォルダを作って、そこを指定しました。
C:\Program Files\Adobe\Adobe After Effects CC\Support Files\Plug-ins\sdk

※これを指定しないとおそらくcドライブのルートに大量にプラグインが吐かれます。自分の場合は吐かれました。
※出力先を直接指定したい場合は、
「プロパティ」→「構成プロパティ」→「リンカー」→「全般」
の「出力ファイル」にパスを直接書いてください。

ビルドしてみる

  1. SDKのフォルダ「Adobe After Effects CC Win SDK\Examples」の下にある「BuildAll.sln」をVSで起動します。
  2. 一方向アップグレードのウィンドウが開くので「OK」でアップグレード実行します。「信頼性の高い~」ウィンドウが開いたら、チェックボックスをはずして「OK」(チェックをはずさないと「OK」連打する羽目になります)。
  3. PR_Public.hファイルの修正します(ヘッダファイルはExamples\Headersの中)。 そのままビルドすると「warning C4819」がでます。5行目の「�2005 by Adobe Systems Inc.」を削除して保存すれば直ります(ファイルが読み込み専用になっている場合は先に解除しておきましょう)。
  4. ビルドします。環境変数で指定したフォルダにプラグインが吐かれているはずです。

※プラグインが出力されない場合、出力先のフォルダにアクセス権がないかもしれません。

デバッグの設定

  1. プロジェクトの「プロパティ」→「デバッグ」を開きます。
  2. 「コマンド」の欄にAEを指定します。

C:\Program Files\Adobe\Adobe After Effects CC\Support Files\AfterFX.exe

  • デバッグ実行するとAEが起動します。
  • ビルドしたプラグインが読み込まれているはず。
  • ブレークポイントにもきちんとひっかかります。
  • デバッグ実行を終了するとAEも閉じます。

取っ掛かり

  • SDK直下にある「After_Effects_SDK_Guide.pdf」にほぼほぼ載ってます。英語ですが関数の説明読むだけで色々値が拾えます。
  • フッテージやコンポやレイヤーをごにょごにょするなら「Adobe After Effects CC Win SDK\Examples\AEGP」以下のサンプルが良い感じです。
  • EntryPointFunc関数がエントリーポイントなので、ここから順に探っていくと良いかもです。
  • 新規でプラグインを作る場合、AEGP\Persistoをコピー,リネームして使うと便利です。Persistoを丸ごとコピーして、フォルダ名・ファイル名・全てのファイルの中身をツール名にリネームすればプロジェクトのできあがり。(例えばツール名が「Test」なら、「Persisto」という部分を全て「Test」に置換する)

取っ掛かり2

EntryPointFunc

  • エントリーの関数。AE起動時にいきなり呼ばれます(プラグイン実行時ではない)。
  • ここでメニューにプラグインが登録されます。
    • AEGP_InsertMenuCommandの部分。
    • AEGP_Menu_FILEという引数が登録先のメニュー指定。AEGP_Menu_FILEは「ファイル」、AEGP_Menu_EDITにすると「編集」という具合。

CommandHook

  • プラグイン実行時に呼ばれます(EntryPointFunc内でAEGP_RegisterCommandHookで設定されてます)。
  • 試しにこの関数内にブレークポイント仕掛けて、デバッグ実行→(AEが起動)→プラグイン実行、で引っ掛けられると思います。
  • いらない処理を消して、自由にAEをごにょごにょしてください。

ダイアログを開きたい

  • 僕の場合、Win32APIで昔ながらの方法でダイアログ開いてます。
  • HWNDとHINSTANCEが必要になるので、
HINSTANCE hInst = GetModuleHandle("このツール.aex");   // このdllのインスタンスを得る
HWND hAEWnd;
ERR(suites.UtilitySuite6()->AEGP_GetMainHWND(&hAEWnd)); // AEのウィンドウハンドル

って感じで拾ってます。

  • あとは普通のダイアログアプリケーションのように作ればひとまず色々やれます。
  • ダイアログなので、開いている間はAE本体は操作できなくなるので注意です。