記事の概要
これまで紹介してきた以下のような手順では、アニメーションのモーションをコントロールすることができなかったが、ControlNetでコントロールできるようになったので、紹介します。
うまくいけば、この動画のようなアニメーションは作成できる。
動画でも解説してます。
環境
OS:Windows 11
GPU:GeForce RTX 4090
CPU:i9-13900KF
memory:64G
python:3.10.10
pytorch:2.1.2
CUDA:11.8
cuDNN:8.8
sd-webui:v1.8.0
sd-webui-animatediff:v2.0.0-a
sd-webui-controlnet:v1.1.441
環境構築
Stable Diffusion Web UIのインストール手順については割愛します。
ライブラリのインストール
Stable Diffusion Web UIを起動後、「Extensions」タブから、以下のライブラリをインストールする。
基本的には全てのライブラリは最新状態にしてください。(ControlNetが効かないことがあります。)
■ABG_extension
https://github.com/KutsuyaYuki/ABG_extension.git
■deforum
https://github.com/deforum-art/sd-webui-deforum.git
■sd-webui-animatediff
https://github.com/continue-revolution/sd-webui-animatediff.git
■sd-webui-controlnet
https://github.com/Mikubill/sd-webui-controlnet.git
モーションモジュールのダウンロード
以下のページからモーションモジュールをダウンロードし、「stable-diffusion-webui¥extensions¥sd-webui-animatediff¥model」フォルダに格納する。
■v3_sd15_mm.ckpt
https://aieasypic.com/inspire/models/detail/animatediff-motion-v3-282581
LoRA
Green screen LoRAとグリーンバックPNGファイルをダウンロードし、LoRAのファイルは、「stable-diffusion-webui¥model¥Lora」フォルダに格納する。
■Green screen LoRAとグリーンバックPNGファイル
https://civitai.com/models/143148/green-screen
「--lowvram」の設定
「stable-diffusion-webui」フォルダに格納されている「webui-user.bat」を編集モードで開き、「set COMMANDLINE_ARGS」に「--lowvram」を追記する。
@echo off
set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS=--xformers --lowvram
set PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.6, max_split_size_mb:128
call webui.bat
「FFmpeg」のインストール
以下の手順などを参考に、導入する。
事前準備
モーションの取得
「Mootion」という3Dキャラクターのモーション動画生成サービスから、モーションをダウンロードする。
「Mootion」の動画を分割
「Mootion」からmp4で動画をダウンロードすると、動画を真ん中で分割する必要があるんで、以下のコマンドで分割を行う。
# インプットファイル用にインプットファイル名を定義
SET input=very_long_hard_dance__akari.mp4
# アウトプットファイル用にインプットファイル名を加工
SET base_name=%input:~0,-4%
# 左半分の動画を生成
ffmpeg -i %input% -vf "crop=in_w/2:in_h:0:0" %base_name%_left.mp4
# 右半分の動画を生成
ffmpeg -i %input% -vf "crop=in_w/2:in_h:in_w/2:0" %base_name%_right.mp4
動画の編集
アスペクト比などの変更が必要な場合は、Windowsに標準搭載の「clipchamp」などを使って、「4:5」などにアスペクト比を変更する。
また、フレーム数をコントロールしやすくするため、以下のコマンドで、動画のFPSを「8」に変換する。
ffmpeg -i very_long_hard_dance__akari_right_5_4.mp4 -r 8 very_long_hard_dance__akari_right_5_4_8.mp4
最初と最後のフレームのクロマキー生成
img2imgのインプットとなる最初のフレームと最後のフレームを以下のpythonプログラムを実行して、取得する。
import cv2
# MP4ファイルのパス
video_path = 'very_long_hard_dance__akari_right_5_4_8.mp4'
# ビデオを読み込む
cap = cv2.VideoCapture(video_path)
# 最初のフレームを取得
ret, first_frame = cap.read()
if ret:
# 最初のフレームをPNG形式で保存
cv2.imwrite('first_frame.png', first_frame)
# ビデオの総フレーム数を取得
total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
# 最後のフレームに移動
cap.set(cv2.CAP_PROP_POS_FRAMES, total_frames - 1)
# 最後のフレームを取得
ret, last_frame = cap.read()
if ret:
# 最後のフレームをPNG形式で保存
cv2.imwrite('last_frame.png', last_frame)
# リソースを解放
cap.release()
上記で作成した最初のフレームと最後のフレームそれぞれに対して、text2imgでクロマキー画像を生成する。
※「Do not auto save」はチェックなしで問題なし。
動画生成
Loraは「lora:GreenScreen_A3:1.5」を指定して、それ以外の設定はだいたい画像の通り。(GreenScreenは他のLoraモデルを使っても問題なし。)
ControlNetのTileで指定している画像は、GreenScreenをダウンロードしたzipファイルに含まれています。
上記の設定であれば、以下のようなアニメーションが生成される。
微調整の余地は残っているが、大筋の手順としては確立できてきた。