音声データから口パクアニメーションを自動生成する方法を解説します。
以前から関心のあったボーカロイド関連の口パク技術をAfter Effectsで試しました。
明瞭な音声データを用意できれば、口パクアニメーションの下地として活用できます。
2026年10月16日に、After Effects 26.5.0で、STEP8の式がマーカーをどう読むかと、「エクスプレッションをキーフレームに変換」の操作を確かめました。
Wav2Lab・Lab2Marker.jsx・Live2Dを使う工程は、今回は確かめていません。
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をダウンロードします。
2026年10月26日現在、Lab2Marker.zipの配布ページには、uploader.jpが2026年11月25日にサービスを終了する告知があります。
告知では、アップロード済みファイルを含む全データを同日23:59に削除するとしています。
配布ページの表示は確認しましたが、ファイルの取得完了、移転先、現行AEでの実行は未確認です。
配布終了後はこのリンクから取得できる前提で進めず、作者の案内で配布状況を確認してください。
STEP6:データの作成
口パターンの素材を配置するためのコンポジションを新規作成します。
対象のコンポジションを選択した状態で、メニューの「ファイル」>「スクリプト」>「スクリプトファイルの実行」からLab2Marker.jsxを実行し、生成した.labファイルを選択します。
スクリプトを実行すると、コンポジション上に母音のレイヤーマーカーが生成されます。
STEP8の式が読むのは、タイムリマップを適用したレイヤー自身のレイヤーマーカーです。
2026年10月16日の確認では、コンポジションマーカーだけを置いた条件で、式がエラーになりました(STEP8で説明します)。
Lab2Marker.jsxがどのレイヤーにマーカーを作るか、マーカーの長さがどうなるかは、今回確かめていません。
STEP8に進む前に、親コンポジションでタイムリマップを適用するレイヤーに、a・i・u・e・o・Nのマーカーが付いているかを確認してください。
STEP7:「あいうえおん」の口パクアニメーションを適用


Live2Dを使う場合は、先に使用するAEプラグインの対応環境を確認します。2026年10月23日に読んだCubism 5 AE Pluginの公式案内では、対応AEは2025(v25)と2024(v24)です。本稿のAE 26.5でのカード検証は、Live2Dプラグインの対応確認を兼ねていません。対応環境を用意したうえで、口の素材用コンポジションにモデルを読み込みます。
公式マニュアルを参考に、無発声と6つの口形を0〜6秒へ配置します。下のMOUTH_FORM・MOUTH_OPEN_Yは旧モデルでの値の例です。モデルごとにパラメータ名・範囲・変形が異なるため、そのまま共通設定として使わず、各時刻の口形を確認してください。6秒を参照できるよう、素材コンポの尺は6秒より長くします。
参考: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;式がマーカーを読む動き(2026年10月16日の確認)
2026年10月16日に、Windows 11 Pro(10.0.26200)のAdobe After Effects 26.5.0(Build 89、日本語表示)で、上の式をそのまま使って確かめました。
口の形の代わりに、0秒から6秒まで1秒ごとに番号を書いた7秒の確認用カード(0は無発声、1〜6はa・i・u・e・o・N)を使いました。
Live2Dのモデルは使っていません。
親コンポジションは640×360・25fps・8秒で、カードのレイヤーにa・i・u・e・o・Nのレイヤーマーカーを0.4秒から1秒おきに置き、長さはどれも0.2秒にしました。
カードとマーカーの用意、式の貼り付け、値の読み出しはスクリプトで行い、画面ではタイムリマップの値とマーカー、式のエラー表示を確認しました。
| 時刻 | タイムリマップの値 |
|---|---|
| 0〜0.36秒(最初のマーカーより前) | 0秒(無発声) |
| 0.4〜0.68秒(aのマーカー) | 1秒(a) |
| 1.4秒・2.4秒・3.4秒・4.4秒(i・u・e・o) | 2秒・3秒・4秒・5秒 |
| 5.4〜5.68秒(Nのマーカー) | 6秒(N) |
| 0.72秒、5.72〜7.5秒(マーカーの後の空き) | 0秒(無発声) |
マーカーの時刻に、長さ(0.2秒)と式のbuffer(0.1秒)を足した時刻を過ぎると、値は0秒に戻りました。
aのマーカーでは、0.68秒は1秒、0.72秒は0秒でした。
式の作りから、Lab2Marker.jsxが作るマーカーの長さによって、口の形を保つ時間が変わります(実際のマーカーの長さは確かめていません)。

マーカーが無いと式の2行目でエラーになる
レイヤーマーカーを1個も付けない条件と、コンポジションマーカーだけを6個置いた条件では、どちらも式の2行目のmarker.nearestKey(time)でエラーになりました。
エラーの内容は「このプロパティにはキーフレームがありません。」でした。

エラーのあいだ、タイムリマップの値は式ではなく、元の2つのキーフレームの値になりました(0.36秒の時点で0.36秒)。
画面にカードが映っていても式が効いているとは限らないため、エラーの表示を確認してください。
マーカーが無いときにエラーを出さず0秒(無発声)を返すには、式全体を次のように囲みます。
if (marker.numKeys === 0) { 0; } else {
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;
}この形にすると、マーカーが無い条件の17の時刻すべてで0秒になり、エラーは出ませんでした。

口を動かすには、この形にしてもマーカーを付ける必要があります。
この囲み方は、実際の口の素材やLab2Marker.jsxのマーカーでは試していません。
キーフレームに変換する
この式は口形の時刻を段階的に切り替えます。手作業でタイミングを編集したい場合は、式をキーフレームへ変換できます。変換だけで口の動きが滑らかになるわけではありません。
タイムリマップを選択し、「アニメーション」>「キーフレーム補助」>「エクスプレッションをキーフレームに変換」を実行します。
After Effects 26.5.0の日本語表示でも、この名前のメニューでした。

確認用のコンポジションを複製して実行すると、2個だったタイムリマップのキーフレームが、0〜199フレームの各フレームに1個ずつ、計200個になりました。
式は残りましたが、無効になりました。
200フレームすべてで、変換後の値は変換前の式の値と同じで、保存して開き直しても変わりませんでした。

変換した直後の値は式と同じなので、切り替えはまだ段階的です。
スムーザーとイーズで滑らかにする作業は、今回確かめていません。
口形を切り替える用途では、まず段階的な値を保って音声とのタイミングを調整します。スムーザーでキーを減らす方法もありますが、母音の開始・終了や参照する時刻が変わるため、自動的な改善とは扱わないでください。
イーズなどで参照時刻を補間すると、目的の口形に達する途中で別の口形を通過する場合があります。口素材の補間と音声を再生して確認し、必要な区間だけを調整してください。今回、この調整後の口パクは検証していません。

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

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




まとめ
本来はAviUtl等と連携して使われる手法ですが、After Effects上でもスクリプト経由でマーカー化して応用できます。
最終的なニュアンスの手動調整は必要ですが、リップシンクの手付け作業の下地として効率化に役立ちます。
よくある質問:After Effectsで音声から口パクアニメーションを作るとき
音声から、口パクアニメーションを自動生成できますか?
明瞭な音声データを用意できれば、口パクアニメーションの下地として活用できます。記事の流れは、音声をwavに変換し、Wav2Labで母音データ(.labファイル)を抽出して、Lab2MarkerでAfter Effectsのレイヤーマーカーに変換し、口の形状アニメーションを適用します。最終的なニュアンスの手動調整は必要です。
音声ファイルは、どんなものを用意しますか?
旧手順では効果音ラボの音声をwavへ変換し、4秒程度のデータで試しました。4秒が必要な最短長という検証結果ではありません。現在の入力条件と解析結果は、使用するWav2Labの版と音声で確認してください。
Wav2Labの設定は、どうしますか?
Wav2Lab.exeを起動し、変換したwav音声データをドラッグ&ドロップします。処理が完了すると同階層に.labファイルが生成されます。旧手順では閾値と単位時間を初期値で試しましたが、音声ごとの推奨値は今回検証していません。生成した区間が細かすぎないかも確認してください。
.labファイルが、うまく作られないときは?
生成された.labファイルをテキストエディタで開き、データが出力されているか確認してください。波形や音質によっては、正常に解析データが取得できない場合があります。
母音データを、After Effectsに取り込むには?
Lab2Marker.jsxを使います。対象のコンポジションを選択した状態で、メニューの「ファイル」>「スクリプト」>「スクリプトファイルの実行」からLab2Marker.jsxを実行し、生成した.labファイルを選択します。実行すると、コンポジション上に母音のレイヤーマーカーが生成されます。
口の形状アニメーションは、どう作りますか?
Live2Dを使う場合はプラグインの対応AEを先に確認します。2026年10月23日の公式対応一覧はAE 2025と2024で、本稿のAE 26.5カード検証とは別です。モデルに合うパラメータで無発声とa・i・u・e・o・Nを0〜6秒へ配置し、素材コンポの尺を6秒より長くします。
口の切り替えを、滑らかにするには?
キーフレーム変換だけでは滑らかになりません。本文の式は口形の時刻を段階的に切り替え、変換後も各フレームの値を保ちます。まず音声に合わせて切り替え時刻を調整してください。スムーザーやイーズは母音のタイミングや途中で参照する口形も変えるため、必要な区間だけを再生確認しながら調整します。この調整結果は今回未検証です。
タイムリマップの式で「キーフレームがありません」というエラーが出るときは?
タイムリマップを適用したレイヤーに、レイヤーマーカーが付いているかを確認します。
2026年10月16日の確認では、レイヤーマーカーが無い条件と、コンポジションマーカーだけの条件で、式の2行目がエラーになりました。
マーカーが付いていない間だけエラーを避けたい場合は、本文のmarker.numKeysで囲む形を使えます。
紹介されているツールは、今も入手できて動きますか?
Lab2Markerの配布先は2026年11月25日のサービス終了を告知しているため、STEP5の配布状況を確認してください。
Wav2LabとLab2Markerの取得完了・現行環境での実行、配布終了後の移転先は未確認です。
Live2Dの対応環境は、STEP7の公式案内で照合してください。
