AupDotNet - C#でaupファイルを読む
はじめに
このaupファイルの中身はバイナリファイルになっておりAviUtl開発者のKENくんさんによる仕様の公開もされていません。
つまりaupファイルを読書きできるのはKENくんさんが作ったAviUtlだけということです。
とは言え、バイナリでも「この辺は文字列っぽいな」みたいなのはある程度分かるので、ファイルパスやニコニコの作品IDなど特徴的な文字列を抽出している事例はあります。
しかし仕様が分からない以上、例えば使ったフォントをリストアップしたり、移動させたファイルのパスを直したりといったことは難しいです。
それでもそこに情報が入っている以上、それを抜き出したり書き換えたりしたくなるのが人の性$ ^{ [要出典] } 。
そんな望みをかなえるのが AupDotNet です。
AupDotNet って何?
AupDotNet は私が C# で書いている aup ファイルを扱うための .NET Class Library です。
ソースコードは GitHub で公開しています。
ちなみに開発言語が C# なのは、Windows 用の GUI アプリに使うときに C# なら WPF とか使えて都合がいいかなと思ったからです。その割にはCLIばかりでは?
どうやって作ったの?
ある日「aupファイルから使ったスクリプトのリストアップしたい」と思いました。
しかしそんなツールは探しても見つからなかったので自分で作ろうと思い立ち、こんな記事にたどり着きました。
(非公式とは言えaupファイルの中身分かってるとかやべえじゃん、神かよ…)
しかしこれだけではスクリプトのリストアップは出来ません。
aupファイルは全体としてはEditHandleと各フィルタプラグインのデータを保存するコンテナの様になっており、上の記事ではaupファイルがどんなコンテナになっているかしか説明されていません。
つまり、拡張編集というフィルタプラグインのデータがどうなっているかまでは分からないのです。
ではどうするか、ひたすらバイナリエディタと睨めっこです。
少しずつ条件を変えてプロジェクトを保存して拡張編集のデータを取り出してバイナリエディタで差分を取って…なんてことを繰り返していたら意外と読めちゃいました。
読めちゃったのでスクリプト抽出も無事出来ちゃいました。
そしてこの解析結果をもう少し再利用可能な形でまとめておきたいと思いライブラリにしてみた次第です。
ただ、まだ未解明の部分があったり破壊的な変更を加えそうなところがあったりするので、未完成ということで NuGet で公開とかはしていません。一生完成しないやつでは
何ができるの?
上述したようにaupファイルはコンテナになっており、AupDotNet はコンテナから EditHandle や各フィルタプラグインのデータを取り出し書き換えることができます。
EditHandle は最低限のデータ(プロジェクトパス、解像度、フレームレート、サンプリングレート等)は取り出せますが、データサイズに対してほとんど解析できていないのでバイナリとして保持しています。
拡張編集のデータについては9割方解析できており、タイムラインのどこにどんなオブジェクトを置いているのか、トラックバーの値、参照しているファイル、テキストの内容など、AviUtl を開かなくてもオブジェクトファイルを生成できる程度にはデータを取り出せるようになっています。
その他のフィルタプラグインのデータについては展開されたバイナリとして取り出せるようになっているので、必要に応じて各自でなんとかしてください。
AupDotNet を使ったアプリケーションとしては以下のようなものがあります。
使ったスクリプトのリストアップ
ファイルパスのリストアップ・修正
使ったフォントのリストアップ
AviUtlを介さず直接オブジェクトファイル(*.exo)を生成する
ニコニコの作品IDのリストアップ・クレジット作成支援
使ってみたいんだけど
AupDotNet は MIT ライセンス で公開しています(2021/12/20 現在)。
それに従って頂ければご自由にどうぞ。
現在 AupDotNet は NuGet への公開はしていないので、git submodule としてプロジェクトに追加するなり、別途ソースコードをダウンロード・ビルドしておく等してご利用ください。
使い方に関してはドキュメントの類を用意できていないので、ソースコードを見たり上記の使用例を参考にして頑張ってください。
2022/01/09 追記
NuGetで公開はじめました。