2025-08-26


以前、静止画をしゃべらせるエンジンとしてSadTalkerを実装してみたがこれは顔全体がやや不自然に動くので、口元が動くだけにできないかな?と調べたところWav2Lipの昔のバージョンがそんな感じらしいので、実装してみたメモ。
1、Python3.8の仮想環境を作成し入る
【Ubuntu】プロジェクトごとに複数のPythonバージョンを使い分ける
のとおり。以下のようにする。
mkdir wav2lip_work cd wav2lip_work python3.8 -m venv venv source ./venv/bin/activate which python python -V
2、静止画を、用意した音声データと同じ秒数の動画に変換する
SadTalkerと違い、Wav2Lipは入力が動画データであるため、写真をしゃべらせたい場合動画に変換する必要がある。また、Wav2Lipの入力画像は16:9が安定するので、その変換も同時に行う。
ffmpeg-pythonを導入する。
pip install ffmpeg-python
顔画像がface.jpg、音声がvoice.wav、出力動画をface.mp4とすると、以下のコードで作成できる。
import ffmpeg image = "face.jpg" audio = "voice.wav" output = "face.mp4" # 音声の長さを取得 probe = ffmpeg.probe(audio) duration = float(probe["format"]["duration"]) ( ffmpeg .input(image, loop=1, framerate=25) .output(output, t=duration, vcodec="libx264", pix_fmt="yuv420p", r=25, vf="scale=-2:720:force_original_aspect_ratio=decrease," "pad=1280:720:(1280-iw)/2:(720-ih)/2") .run(overwrite_output=True) )
こうすると、音声voice.wavと同じ秒数の動画face.mp4が16:9映像比で出力される。これで入力データの準備は整った。
3、プレトレーニング済みのモデルデータをダウンロードする
wav2lip_gan.pthを取得する必要がある。これは色々なサイトにあるが、当方はkaggle.comにユーザ登録してダウンロードした。
https://www.kaggle.com/datasets/blackpinkai/wav2lip?resource=download
Zipがダウンロードされるので解凍し、wav2lip_gan.pthを取得する。
s3fd.pthを取得する必要があり、これは以下から直接ダウンロードできた。
wget "https://www.adrianbulat.com/downloads/python-fan/s3fd-619a316812.pth" -O "s3fd.pth"
4、OpenSource版のWav2Lipをcloneし、モデルデータを配置する
git clone https://github.com/zabique/Wav2Lip mv wav2lip_gan.pth Wav2Lip/checkpoints mv s3fd.pth Wav2Lip/face_detection/detection/sfd
5、必要なモジュールをインストールする
pip install https://raw.githubusercontent.com/AwaleSajil/ghc/master/ghc-1.0-py3-none-any.whl cd Wav2Lip pip install -r requirements.txt pip install -q youtube-dl pip install librosa==0.9.1
これで準備は整ったので、いよいよリップシンク実行。
6、実行
cd Wav2Lip python inference.py --checkpoint_path checkpoints/wav2lip_gan.pth --face "../face.mp4" --audio "../voice.wav" --outfile "../output.mp4"
無事output.mp4が出力され、口元だけがその音声でパクパク動く動画が作成できた!
※本記事内容の無断転載を禁じます。
ご連絡は以下アドレスまでお願いします★
Wav2Lipのオープンソース版で静止画の口元のみを動かして喋らせる
【iOS】アプリアイコン・ロゴ画像の作成・設定方法
オープンソースリップシンクエンジンSadTalkerをAPI化してアプリから呼ぶ【2】
オープンソースリップシンクエンジンSadTalkerをAPI化してアプリから呼ぶ【1】
【Xcode】iPhone is not available because it is unpairedの対処法
【Let's Encrypt】Failed authorization procedure 503の対処法
【Debian】古いバージョンでapt updateしたら404 not foundでエラーになる場合
ファイアウォール内部のWindows11 PCにmacOS Sequoiaからリモートデスクトップする
ファイアウォール内部のNode.js+Socket.ioを外部からProxyPassを通して使う
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法
【Apache】サーバーに同時接続可能なクライアント数を調整する
GitLabにHTTPS経由でリポジトリをクローン&読み書きを行う
size_tとssize_tを使い分けてSegmentation Faultを予防する
【Debian】古いバージョンでapt updateしたら404 not foundでエラーになる場合
Windows11のコマンドプロンプトでテキストをコピーする
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
システムで予約済みのパーティションを更新できませんでした このPCは現在Windows11のシステム要件を満たしていません