LipSync動画作成の背景
まず、モーションAIから説明させてください。この記事を読まれている方はご存知かもしれないが、モーションAIとは、音声データから「発話のリズム・イントネーション」を自動解析し、AIモデルが「口の開閉」「表情の変化」「頭や体の動き」を推定して動画を生成する技術である。
現在、Youtubeなどの動画投稿サイトでモーションAI技術は急速に普及しているようで、DreamFaceやD-ID、HeyGenなどのサービスを使えば、ブラウザ上で顔写真と音声(またはテキスト)をアップロードすることで自動で口の動きやまばたき、表情変化も含めた動画を簡単に生成することができる。
しかし、仕事でLipSync技術を使うことになりそうなので、この技術についてオープンソースを使って深掘りしたいと思う。
オープンソースのSadTalkerとWav2Lip
少し調べたところ、LipSyncで有名なオープンソースにSadTalkerとWav2Lipというものがあるらしい。
SadTalker
- Wav2Lipより進化した「表情付き」のリップシンクAI
- 顔画像+音声で自然に目や表情も動く
- 長時間でもOK(ただし処理時間はかかる)
👉 https://github.com/OpenTalker/SadTalker
Wav2Lip
- GitHub公開の有名なリップシンクAI
- 顔の動画+音声ファイルを入力すると、長時間でも自然な口パクを生成
- 研究用途だけどYouTuberも結構使ってます
- Python + PyTorch 環境が必要(ローカルPCで動かす)
👉 https://github.com/Rudrabha/Wav2Lip
Wav2Lipはインストールプロセスが比較的複雑で、特定のライブラリのバージョンを指定したり、追加のセットアップが必要になる場合がある。一方、SadTalkerは、依存関係の管理が比較的シンプル。ということで、今回はSadTalkerを試したいと思う。
SadTalkerをローカルにインストールして実行
ローカル開発環境
ubuntu 22.04, Python 3.10.12
依存関係のインストール
$ sudo apt-get update
$ sudo apt-get install ffmpeg libsm6 libxext6 -y
仮想環境の作成と有効化
$ sudo python3 -m venv sadtalker_env
$ ls
sadtalker_env
$ source sadtalker_env/bin/activate
SadTalkerリポジトリのクローン
$ git clone https://github.com/Winfredy/SadTalker.git
$ cd SadTalker
$ pip3 install -r requirements.txt
事前学習済みモデルのダウンロード
$ bash scripts/download_models.sh
※1.5Gぐらいあるらしく、結構ダウンロードに時間かかります
動画生成コマンドの実行
$ python3 inference.py --driven_audio ./input_audio.wav --source_image ./input_image.jpg --result_dir ./results --preprocess full --still --expression_scale 1.0 --pose_scale 1.0
Traceback (most recent call last):
// 省略
from torchvision.transforms.functional_tensor import rgb_to_grayscale
ModuleNotFoundError: No module named 'torchvision.transforms.functional_tensor'
何いいいいいいい、エラーになる。。。
何度やってもエラーになるので、Hugging Face Spaces公開されているSadTalkerで画像、音声ファイルを実行することにしました。
※Hugging FaceでSadTalkerを試したい場合は、「Spaces」から検索して、提供されているデモを使用します。
👉 https://huggingface.co/
SadTalkerで作成したLipSync動画
元画像
代々木公園でモデルさんを撮影させていただきました。(記事に掲載することについてご本人の承諾をいただいております)

音声
VOICEVOXでテキストからwavファイルを作成します。
音声ファイルはこちら
SadTalkerで作成したLipSync動画
Your browser does not support the video tag.👉 https://hpscript.s3.ap-northeast-1.amazonaws.com/output_audio-0-100.mp4
まとめ
SadTalkerとD-IDで作成したLipSync動画を見比べてみましたが、SadTalkerの方が、表情への反映などが品質が良い印象ですね。
もっと本格的にやる場合は、音声もVOICEVOXで作成するのではなく、声優さんなどから5分以上録音し、その特徴量を抽出して音声データから実際のVoiceを合成するなどもできるようです。
備考: モデルさんの撮影など新鮮で、色々勉強になりました。