音声データから口パクアニメーションを自動生成する方法を解説します。
以前から関心のあったボーカロイド関連の口パク技術をAfter Effectsで試しました。
明瞭な音声データを用意できれば、口パクアニメーションの下地として活用できます。
STEP1:音声データの用意
今回は検証用として効果音ラボの音声データを用意しました。
参考:https://soundeffect-lab.info/sound/voice/line-girl1.html
STEP2:mp3からwavに変換
音声ファイルをmp3からwav形式に変換します。
母音抽出にはある程度の音声の長さが必要なため、今回は4秒程度のデータを使用しています。
STEP3:Wav2Labを使って母音データを抽出
配布元のページからWav2Labをダウンロードして解凍します。
ダウンロード:https://www.nicovideo.jp/watch/sm34735545
STEP4:データ生成
Wav2Lab.exeを起動し、変換したwav音声データをドラッグ&ドロップします。
処理が完了すると同階層に.labファイルが生成されます。

※設定の閾値と単位時間はデフォルトのままを推奨します。
単位時間を短くしすぎると口の切り替えが過度に細かくなります。

※生成された.labファイルはテキストエディタで開き、データが出力されているか確認してください。
波形や音質によっては正常に解析データが取得できない場合があります。
STEP5:母音データをLab2MarkerでAEのレイヤーマーカーに変換
ビームマンP氏配布のLab2Marker.jsxをダウンロードします。
STEP6:データの作成
口パターンの素材を配置するためのコンポジションを新規作成します。
対象のコンポジションを選択した状態で、メニューの「ファイル」>「スクリプト」>「スクリプトファイルの実行」からLab2Marker.jsxを実行し、生成した.labファイルを選択します。
スクリプトを実行すると、コンポジション上に母音のレイヤーマーカーが生成されます。
STEP7:「あいうえおん」の口パクアニメーションを適用


先ほどのコンポジション内にLive2Dデータを読み込みます。
公式マニュアルを参考に、母音に応じた口の形状アニメーションを1秒間隔で作成します。
参考:https://docs.live2d.com/cubism-editor-manual/after-effects/?locale=ja
0s(無発声)
MOUTH_FORM 0
MOUTH_OPEN_Y 0
1s(あ)
MOUTH_FORM 1
MOUTH_OPEN_Y 1
2s(い)
MOUTH_FORM 1
MOUTH_OPEN_Y 0.4
3s(う)
MOUTH_FORM 0
MOUTH_OPEN_Y 0.3
4s(え)
MOUTH_FORM 0
MOUTH_OPEN_Y 0.6
5s(お)
MOUTH_FORM 0
MOUTH_OPEN_Y 1
6s(ん)
MOUTH_FORM 0
MOUTH_OPEN_Y 0STEP8:仕上げ
親コンポジションで対象レイヤーにタイムリマップを適用します(ショートカット:Ctrl+Alt+T)。
タイムリマップのプロパティにエクスプレッションを記述します。
buffer = 0.1;
nKey = marker.nearestKey(time);
if(time < nKey.time){
cIndex = nKey.index-1;
} else {
cIndex= nKey.index;
}
ret = 0;
if(cIndex > 0)
{
nowmarker = marker.key(cIndex);
if(nowmarker.time + nowmarker.duration + buffer > time)
{
comment = nowmarker.comment;
if(comment == "a"){
ret = 1;
}else if(comment == "i"){
ret = 2;
}else if(comment == "u"){
ret = 3;
}else if(comment == "e"){
ret = 4;
}else if(comment == "o"){
ret = 5;
}else if(comment == "N"){
ret = 6;
}
}
}
ret;エクスプレッションのみでは切り替えが段階的になるため、キーフレームに変換して動きを滑らかにします。
タイムリマップを選択し、「アニメーション」>「キーフレーム補助」>「エクスプレッションをキーフレームに変換」を実行します。
続けて「ウィンドウ」>「スムーザー」を開き、「適用」で不要なキーフレームを間引きます。
生成されたキーフレームを全選択してイーズを適用し、プレビュー再生しながらタイミングを微調整します。

After Effectsのほかの操作は、まとめからご覧いただけます。

この記事で紹介しているコードは、GitHubのMOTOKI-LLC/cg-method-codeにもまとめています。
見た目の効果を作る記事は、ほかにもあります。




まとめ
本来はAviUtl等と連携して使われる手法ですが、After Effects上でもスクリプト経由でマーカー化して応用できます。
最終的なニュアンスの手動調整は必要ですが、リップシンクの手付け作業の下地として効率化に役立ちます。
