見出し画像

Google Colabで動かすSadTalker

Google Colab上でSadTalkerを動かしました。公式のデモコードを少しいじって、自分のファイルを指定しやすくしたものです。

▍SadTalkerとは

SadTalkerは音声と画像をもとに口パク(リップシンク)の動画をつくる仕組みです。絵や写真に写っている人が音声に合わせて話している風の映像を作れるということです。人間を動画で撮影しなくて済めば、収録がはかどりそうです。素晴らしい!

次の動画は実際に作ってみたサンプルです。音声はVoicepeakで出力し、画像はStable Diffusion XLで生成したものです。

SadTalkerの情報はGitHubに一通り揃っているので、そちらをご覧いただければ試したり実装したりはしやすいです。Hugging FaceやWeb UIでも実行できるので、まず試してみたい方はそれらを触ってみるのが早いと思います。

▍Google Colabで動かす

■デモコードの準備

GitHubに上がっているデモコードをベースとします。以下のリンクです。
https://colab.research.google.com/github/Winfredy/SadTalker/blob/main/quick_demo.ipynb

あらかじめノートブックの実行環境がGPUになっていることを確認ください。その後は以下のモデルのダウンロードまでそのまま実行します。

print('Download pre-trained models...')
!rm -rf checkpoints
!bash scripts/download_models.sh

■フォルダの準備

Googleドライブのマイドライブにフォルダを作成します。インプットの画像と音声の格納、アウトプットの動画の出力先として使います。
ここではマイドライブ直下にSadTalkerフォルダを、さらにその中にInputとOutputフォルダを作成しています。

import os
from google.colab import drive, files

# Googleドライブをマウント
drive.mount("/content/drive")

# 各変数名を定義
base_dir = "/content/drive/MyDrive/SadTalker"
input_dir = "Input"
output_dir = "Output"

# ディレクトリ作成
if not os.path.exists(base_dir):
    os.makedirs(base_dir)

input_path = os.path.join(base_dir, input_dir)
if not os.path.exists(input_path):
    os.makedirs(input_path)

output_path = os.path.join(base_dir, output_dir)
if not os.path.exists(output_path):
    os.makedirs(output_path)

■ファイルのアップロード

インプット用のファイルをアップロードします。なお、対象となる音声ファイルはwav、画像ファイルはpngらしいです(他の形式は未検証です…)。

Googleドライブでアップロードした方が早いと感じていますが、Google Colabで完結したい方は以下のコードをお使いください。実行するとファイルアップロードボタンが現れます。

home_path = os.getcwd()
os.chdir(input_path)
files.upload()
os.chdir(home_path)

続いて、アップロードしたファイルを指定します。ファイル名はご自身のものに置き換えてください。

# 音声ファイル(wav)
audio_file = "audio.wav"

# 画像ファイル(png)
image_file = "image.png"

■動画作成

ファイル指定の箇所以外は元のデモと変更はありません。パラメーターの詳細はこちらで解説されています。

!python3.8 inference.py --driven_audio {os.path.join(input_path, audio_file)} \
           --source_image {os.path.join(input_path, image_file)} \
           --result_dir {output_path} \
           --still \
           --preprocess full \
           --enhancer gfpgan

しばらくすると完了し、アウトプット用のフォルダに動画などが出力されます。末尾にenhancedがついているファイルがもっとも画質がよいです。

ちなみに、冒頭の23秒の音声で約11分かかりました。ローカルのMacBook Air M1 2020だと約3時間かかりました😱

▍おわりに

Google Colab上でSadTalkerを動かす方法を紹介しました。よく見たらフォルダとファイルを指定するコードを紹介しただけでしたが、お許しくださいませ。。


私たちのデジタル技術活用のメモが次のマガジンにあります。よろしければ覗いてみてください!


この記事が気に入ったらサポートをしてみませんか?