After EffectsでもVOICEVOXが使いたい、「字幕に合わせた音声を生成して自動で配置したい」ということでそれ用のスクリプトを作ってみました。
実際のコードは公開していませんがExtendScriptを使ったAfter Effects用のスクリプト開発について少し書いておきます。
After EffectsでVOICEVOXを使う
今回作ったスクリプトでは
- AEで作ったテキストレイヤー(文章)からVOICEVOXで音声ファイルを作成
- それをAEに取り込んでコンポジション内に配置
- 最後に音声ファイルの長さに合わせてテキストレイヤーの長さを揃える
というようなことが一発で出来ます。
VOICEVOXで音声ファイルを作成して、ファイルをAEに入れて、配置して、長さを揃えるという4つの作業が一瞬で行えるのですごく便利ですね。
なお、私は音声読み上げを使った動画は久しく作っていませんでしたが、今後はずんだもんちゃんが読み上げてくれる動画を上げるかもです。(キャラが動いたりする凝ったものものは予定していません。)
VOICEVOXとの連携の話に移る前にスクリプトの作り方を簡単に紹介します。
After Effects用のスクリプトを自作するには
ざっくり書くと、Javascriptを拡張したExtendScriptという言語で書いた.jsxファイルをインストールするだけです。
インストールしたスクリプトは「ファイル>スクリプト」から起動するか
Adobe\Adobe After Effects 20xx\Support Files\Scripts\ScriptUI Panels\下に配置されたスクリプトを「ウィンドウ」から表示させて使いましょう。
Javascriptが使える人ならExtendScriptのコードを書くのは容易いのですが、若干異なるところもあります。アロー関数が使えなかったりconst, letが使えなかったりします。
エラーが出たら古い形式のコードで書いてあげましょう。
とりあえず作って動かしてみよう
コードは「Visual Studio Code」で書いていきます。
コードの補完は
- https://github.com/aenhancers/Types-for-Adobeをワークスペースに入れればよい
- 導入の解説は「さかもとのサイト」を参考に
作ったコードをAEに送るには「Adobe Script Runner」を使います。拡張機能から検索して入れておきます。
初期設定でAfterFX.exeパスを通す必要があります。綺麗なパスなら最初から通っているはず。設定は「アンインストール」の横にある歯車の「拡張機能の設定」にあります。
パスを通したらとりあえずtest.jsxファイルを作成してサンプルコードを書いてみましょう。今回簡単なサンプルを作ったのでこれをそのままコピペしてください。
ファイルが出来たらAEを起動して、「Ctrl+Shift+P」または「F1」でコマンドパレットを開いて、「Adobe After Effects」と入力して決定。
これでtest.jsxがAEで一時的に読み込まれた状態になります。
先程のサンプルでは最初にアラートが表示されるはずです。サンプルコードはDockableなパネルになっているので、ファイルをAdobe\Adobe After Effects 20xx\Support Files\Scripts\ScriptUI Panels\下に配置してウィンドウから起動すればドックに配置できます。デバッグ中はただのウィンドウとして起動します。
サンプルの機能としては2つの動画レイヤーのフェード+暗転(+その反転)で繋ぐだけのものです。フェードする長さと音量をinputで受け取って調整できるようになっています。
レイヤーを2つ以上選択していないと何も起こりません。
これだけの簡単な機能ですが、AEが一発でそれをやってくれる機能はないので作っておくとかなりはかどりますね!
AEはプロ仕様の映像処理が備わっている代わりに、効率化は自分でやってねって感じなので玄人向きですよね。
ここまで確認できればあとは自分で調べて好きなものを作れるはずです。
でもExtendScriptの情報は日本語だとかなり少ない、海外のだとピンポイントで欲しい情報がやや見つかりにくいので時間は掛かると思います。
調べるときはまずこの2つから探してみましょう。
AEとVOICEVOXを連携させる
スクリプトにできることには限りがあるので今回はこのような形で実現しています。
- 合成音声を作るのはコアエンジン(run.exe)が担当
- コアエンジンに命令を送るのはコンソールアプリが担当(C#で自作)
- ExtendScriptからはcallSystemを使ってコンソールアプリにメッセージを送る
ExtendScriptだけで完結すれば何かと良いのですがSoket通信で詰まりました。
コアエンジンに合成用のJsonデータが上手く送れません。422 Validation Errorが返ってきます。C++でプラグインを作ればあるいは・・・?
なのでコンソールアプリから音声ファイルを作る方法に変えました。
コアエンジン自体は配布されている製品版に入っている「run.exe」を起動した状態でPOSTを投げるだけでよいので非常に簡単に扱えます。素晴らしい。
run.exeを起動した状態で「http://localhost:50021/docs」にアクセスすればドキュメントも確認できます。curlから使う場合はJsonデータをファイルとして読み込ませましょう。
-d @filepath/voicevox.jsonのように。
POSTを投げるコンソールアプリはC#で作成しました。作ったら環境変数を通してコマンドラインから使えるようにしておきます。
最後にExtendScriptからcallSystemでコマンドラインを使います。
system.callSystem(‘cmd.exe /c \”voiceGen -t “‘ + layers[i].name +'”\”‘);
赤文字の部分が調整部分です。voiceGenは今回作ったコンソールアプリです。
ダブルクォーテーションの前にバックスラッシュが必要なのがポイントですね。
ということで以上です。Adobeソフト用のスクリプトは意外と簡単に作れますが、情報は足りてないですね。小さめのツールが高値で売られているカラクリを見た気がしました!
ずんだもんちゃんに読み上げさせるようになるとリアルの方でも語尾に「のだ」がつくようになるらしいのだ……