MFCCベースのリップシンク解析ツール。音声ファイルを解析して、リップシンクアニメーション用の母音タイミングデータを出力します。
- WAV音声ファイルを読み込み
- 各フレームのMFCC(メル周波数ケプストラム係数)を抽出
- 事前キャリブレーションされた母音プロファイル(A, I, U, E, O, N)と比較
- 母音タイミングデータをJSONで出力
- (オプション)口画像を使って動画を生成
uLipSync / wLipSync と同じアプローチを採用しています。
npm installpip install -r requirements.txtnode lip_sync.js <音声.wav><音声>_lipsync.json が生成されます。
python make_video.py -j <音声>_lipsync.json -i ./mouth_images -o output.mp4# 解析
node lip_sync.js sample.wav
# 動画生成
python make_video.py -j sample_lipsync.json -i ./mouth_images -o sample_output.mp4{
"audioPath": "/path/to/voice.wav",
"sampleRate": 44100,
"duration": 37.07,
"frameCount": 3191,
"hopSize": 512,
"frames": [
{ "time": 0.000, "phoneme": "N", "rms": 0.0001 },
{ "time": 0.021, "phoneme": "A", "rms": 0.0523 },
...
]
}| Phoneme | 口の形 | サンプル |
|---|---|---|
| A | 大きく開く(あ) | ![]() |
| I | 横に広げる(い) | ![]() |
| U | すぼめる(う) | ![]() |
| E | 中間(え) | ![]() |
| O | 丸く開く(お) | ![]() |
| N | 閉じる(無音) | ![]() |
mouth_images/ フォルダに以下の画像を配置:
a.png- 「あ」の口i.png- 「い」の口u.png- 「う」の口e.png- 「え」の口o.png- 「お」の口n.png- 閉じた口(無音時)
※すべての画像は同じサイズにしてください
const { analyzeLipSync, saveResult } = require('./lip_sync');
const result = await analyzeLipSync('voice.wav', {
volumeThreshold: 0.005, // 無音判定の閾値
frameSize: 1024, // FFTフレームサイズ
hopSize: 512 // フレーム間のホップサイズ
});
saveResult(result, 'output.json');- meyda - 音声特徴量抽出(MFCC)
- wav-decoder - WAVファイルデコード
- opencv-python - 画像読み込み
- moviepy - 動画生成
profile.json には各母音のキャリブレーション済みMFCCデータが含まれています。このデータは wLipSync のサンプルから取得しました。
特定の声に対してより高い精度が必要な場合は、Unityの uLipSync でカスタムプロファイルを作成できます。
MIT License
プロファイルデータ (profile.json):
- Copyright (c) 2021 hecomi (uLipSync)
- Copyright (c) 2024 Noeri Huisman (wLipSync)





