はじめに
先日AviUtlのプラグインを作ろうとして、C++ド素人だったためにAviUtl Plugin SDKのサンプルのビルドにすら苦労したので備忘録的に手順を書き記しておきます。
この記事では、連番BMP画像での出力オプションを追加する出力プラグイン bmp_output
のサンプルをビルドします。
準備
プラグインSDKの入手
今回は練習としてサンプルをビルドしたいので、まずAviUtlのお部屋のダウンロードから aviutl_plugin_sdk.zip
を入手します。
ダウンロードが終わったら適当なフォルダに解凍しておきます。
Visual Studio
ビルドはVisual Studio 2022を使用します。
世の中には多くのC++コンパイラがありますが、C++初心者の自分がコマンドラインからコンパイルしたりMakeなどをセットアップするのは大変なので、今回はIDEに丸投げします。
なお、Visual Studioのインストール方法はこの記事では解説しません。
プロジェクトの作成
次に空のC++プロジェクトを作成します。
まずVisual Studioを開き、新しいプロジェクトの作成をクリックします。
空のプロジェクトを選択して「次へ」をクリックします。
最後にプロジェクトの名前と位置を決めます。
この辺はデフォルトで大丈夫です。
自分は好みで「ソリューションとプロジェクトを同じディレクトリに配置する」にチェックを入れています。
設定が終わったら「作成」をクリックします。
まっさらなプロジェクトが開きます。
次に、ソースファイルやヘッダファイルなどをプロジェクトに追加していきます。
ソリューションエクスプローラーを表示して、プロジェクト名を右クリックし、メニューの「エクスプローラーでフォルダーを開く」項目をクリックします。
プロジェクトのフォルダが開くので、ここに解凍した aviutl_plugin_sdk
から .auf
以外の bmp_output
から始まるファイルと output.h
をコピーまたは移動します。
コピーが終わったらVisual Studioへ戻り、ソリューションエクスプローラーから以下のようにファイルを設定します。
不安:リソースファイルカテゴリって何を入れればいいんですかね。.rc
もここでいいのかな…
これでプロジェクトの作成は完了です。
ビルド
次にビルドのためにプロジェクトを設定していきます。
bmp_output.cpp
をIDEで開いてみると文字列がエラーを起こしているのでまずはこれを黙らせます。
ソリューションエクスプローラーからプロジェクト名を右クリックして、メニューから「プロパティ」をクリックします。
「構成プロパティ」→「詳細」から 文字セット
を マルチ バイト文字セットを使用する
に設定します。
次に「構成プロパティ」→「C/C++」→「言語」から 準拠モード
を 既定
に設定します。
エラーが消えました。
次にコンパイラやリンカーの設定をしていきます。
まず、先ほど設定したときと同じようにプロジェクトのプロパティを開きます。
「構成プロパティ」→「全般」から 構成の種類
を ダイナミック ライブラリ (.dll)
に設定します。
次に同カテゴリ内「詳細」から ターゲット ファイルの拡張子
を .auo
に設定します。
「構成プロパティ」→「リンカー」→「入力」に移動して モジュール定義ファイル
に bmp_output.def
(.def
ファイルのパス)を設定します。
最後にIDE上部リボンの構成を Release
と x86
に設定します。
これでビルドのための設定は終わりです。
ソリューションエクスプローラーからプロジェクト名を右クリックしてメニューからビルドすると <プロジェクトのフォルダ>/Release/<プロジェクト名>.auo
が生成されています。
これでサンプルをビルドできました。
動作確認
前のセクションでサンプルをビルドするという目的自体は果たされましたが、正しくビルドできているかを確認するために動作確認は大事です。
適当な aviutl.exe
と同じ階層に plugins
フォルダを作成してそこに生成した .auo
ファイルを入れてAviUtlを起動します。
生成された .auo
(DLL)が悪ければ、この時点でAviUtlがクラッシュしたりします。
ほとんどメモリ読み取り違反が原因なので、プラグインからエクスポートされる構造体が変ではないか(語彙力)確認してみてください。
サンプルから何もいじってなければこれは起きないはずですが…。
起動できたら、ツールバー →「その他」→「出力プラグイン情報」をクリックしてください。
ここで生成したプラグインが表示されていればもう正常に動いたようなものです。
もし、表示されていなければ異なったアーキテクチャでビルドしていることが原因の可能性があります。
AviUtlのプラグインはx86である必要があります。(要検証)
実際に、出力できるかも確認するために適当な動画を作成します。
本当に動画の内容はなんでもいいのですが、自分は加減速移動を使用してボールが跳ねるアニメーションを作ってみました。
ツールバー →「ファイル」→「プラグイン出力」→「連番BMP出力」をクリックします。
ファイル名に名前を入れて、適当なフォルダを選択し「保存」をクリックします。
出力が始まり、フォルダに連番BMPファイルが出力されていることが確認できます。
無事ビルドしたサンプルの動作を確認できました。
おわり
長文でしたが、最後まで読んでいただきありがとうございました。
ここまで長い記事や画像を使用した記事の執筆ははじめてで、大変読みにくくなってしまいました。
次回はRustでプラグイン作成に挑戦しようと思っています。