見出し画像

【ComfyUI + AnimateDiff】SparseCtrlで一貫性のあるAIアニメーション作れるんじゃね?

ComfyUI + AnimateDiffで、AIイラストを
4秒ぐらい一貫性を保ちながら、
ある程度意図通りに動かしたいですよね!

でも参照用動画用意してpose推定はめんどくさい!
そんな私だけのニーズを答えるワークフローを考え中です。

まだワークフローが完成したわけでもなく、
日々「こうしたほうが良くなるな」の繰り返しなのですが、
備忘録として現状のワークフローを紹介したいと思います。

ちなみ今回の完成イメージはコレです。
ピザを食べるメイドさん。

ピザ?


AnimateDiffの課題

AnimateDiff v3は16フレーム動画で学習されてるらしいので16フレーム以上のアニメ、たとえば32フレームのアニメをテキストベースで作ると、16フレームアニメと16フレームアニメを無理やりくっつけた、みたいな動きになるんですよ。

「前向いてる人」と「横向いてる人」がくっついちゃったみたいな
よくあるAIアニメ

とくにアニメ系モデルは動きや一貫性の制御が難しい!
そのために、16フレーム以上のアニメを作る際はControlNet等で一貫性を保つ工夫を入れてやる必要があるんです。
その方法は色々あって、いろいろ試してる状態です。

やはり動画からvideo2videoはそれなりに安定しますし、
動画から人の動きのOpenPose(DW pose)を抜き出すとかなり安定します。

力こぶ動画からpose推定でアニメ化

ただね、動画から動画作る系、
めんどくさいんですよ!!!!
動画を用意しないといけないから!!!!

そこで、動画を用意しなくて良い、
そこまで大変でないワークフローを考えてみることにしました。


▼考え方▼

1️⃣ アニメ系モデルでアニメーションが難しいので
まず実写系モデルを使う
実写系モデルで、ベースとなる静止画を作る

2️⃣ 動画のキーフレームとなる静止画を数枚作る
(その際、"1"の生成画像をIPAdaptorで一貫性を出す)

3️⃣ それらの静止画を「SparseCtrl」という謎技術に参照させて
中割として機能させ、一本の実写風動画を作る

4️⃣ その"3"でできた動画からDepthとOpenPoseを推定し、
それをもとにアニメ動画を作る

つまり1️⃣・2️⃣・3️⃣・4️⃣の4つのワークフローができます。

ちなみに背景は今回気にしてないです。
個人的な考え方として、背景も人物も一発で作ると碌な目にあわない。なので別々に作って人物をRemBG系処理で抜いて背景と合成させるほうが良いかと考えています。


1️⃣ 実写系モデルでベースとなる静止画を作るワークフロー

このワークフローの生成物
ワークフロー

ワークフローは別段ややこしいことはせず。
最終的につくりたいアニメのイメージを想定しながら元絵をつくります。
ワークフロー"2"でポーズを動かせるようにするためにこの時点でControlNetでOpenPose Editorでベースのポーズも作っています。OpenPose Editorは便利なのでインストールしてね。
実写と比較してアニメは顔が大きくなりがちなので、この時点で小顔にならないように、OpenPose Editorで顔を大きめに作ると良いです。

ちなみにモデルは実写系LCMモデル「DREAM_BY_STABLE_YOGI(v3+LCM)」を使ってます。早いといろいろ試せるからねぇ。
LCMモデルを使うときはKSamplerのsampler_nameを「lcm」にしてcgfを「2」とかに下げてください。



2️⃣  キーフレームとなる静止画を作るワークフロー

このワークフローの生成物
ワークフロー。エディターはポーズ別に用意し(左下)、都度繋ぎ変える

ワークフロー”1”にIPAdapterがついただけで、ほぼ変更はなしですね。
ここのOpenPose Editorでポーズを変えたものをつくって、4枚のキーフレーム画像を作っています。


3️⃣ SparseCtrlを使って実写風動画を作るワークフロー

このワークフローの生成物
ウネウネは気にしない
そろそろワークフローがきもい

SparseCtrlは謎技術なんですがAnimateDiffで参照させると、超強力にその絵を取り込んでくれる技術です。エンコーダーが必要なので下記で入手してください。

「RGB(画像を参照)」と「Scribble(ラフ画を参照)」という2つの参照方法があって、それぞれ特徴があるんですが、詳細はよくわからん。toyxyzさんがたまに解説を呟いてるので、そのポストを追ってくれぃ。

SparseCtrlをComfyUIで扱えるようにするためにComfyUI-Advanced-ControlNetをインストールしてね。
あとAnimateDiffのアニメが安定する謎技術「FreeInt」もこの機会に使ってしまいましょう。ComfyUI-AnimateDiff-Evolvedで扱えるはず。
まぁ、なくてもいいけど。(使うと商用利用がダメだった気がする)

このワークフローでは4枚の中割用画像を使ってSparseCtrlを「RGB」と「Scribble」両方で参照させています。
RGBだけだと中割のつなぎが汚くなるので、Scribbleも通したほうが自然になります。
Scribbleで参照する際は、そのままだとラフ絵じゃないので「ScribblePreprocessor」を通しています。

画像2枚以上参照させるにはVideoHelperSuiteのLoad Imagesあたりが良い気がするんですけど、面倒なんで「Batch Image」をタコ足配線したら動きました笑

この場合、4枚の画像が等間隔で中割元として参照されます。SparseCtrl Spread Methodで参照タイミング変えれた気がするけど、よく分かってないのでtoyxyzさんのポストを追ってください。
(このあたりの情報が2024年1月時点で全然見つかってないのでtoyxyzさんはマジで解説を書いてほしい‥)

動画にまとめるのは「VideoHelperSuite」の「Video Combine」を使いますが、便利すぎてもうほかの保存方法に戻れなくなります。gifやmp4にまとめてくれます。

ちなみに、生成動画を見ていただくと、結構、服やら帽子がグニャグニャしていますが、ワークフロー"4"では、そこはあまり使わないので気にしないでください。もちろん、この時点で一貫性があるに越したことはないですが、この程度の荒ぶりならワークフロー"4"でごまかせます。


4️⃣ 実写風動画をPose・Depth推定でアニメ化

「Pose推定」+「Depth推定」生成物。
PromptScheduleでピザを食べるように改良。
「Depth推定」のみ。あれ、一番いいかも。
「Pose推定」のみ。ちょい荒れますね。
最後のワークフロー

前提として、アニメ系モデルを使う際に、異常に描き込み系やキラキラする系のモデルは向いてないです。アニメにノイズが混じってきます。
なので私は絵がパキッと出る「CoffeeMix」を使っています。

ここではワークフロー"3"でできた動画をPose推定とDepth推定して、その推定結果をControlNetで使っています。
Depth推定は「comfy_controlnet_preprocessors」の「Zoe-DepthMapPreprocessor」を使ってるんですが、処理が重い分、めちゃくちゃ推定が精緻です。すごい。

また「瞬き」や「ピザを食べる」などの演出は「FizzNodes」の「Batch PromptSchedule」でテキストでフレームごとに指示を追加しています。
(「PromptSchedule」」だとなぜか機能しない‥)

KSampler後に「ArtClarity」という1倍のアップスケーラーでくっきりさせています。

工程は以上です。お疲れ様でした。



結論

結局、あんまり簡単ではない。
まぁベースだけ組んじゃえば、あとは融通が効くかなと思います。
ただもっと良い方法がありそうだし、
日々新たな手法が生まれるだろうから、検証の旅は一生続くわけですね。

面倒だなと思った人はPikaを使いましょう。


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