メニュー

ランキング 24時間集計

目次

AIでアニメーション制作!AnimateDiffの基本的な使い方【Automatic1111】

SoreNutsからのお知らせ

 新規記事
3/20に【ComfyUI】ランダムなカラーパターンからイラストを作る方法を公開!
2/28に【ComfyUIでControlNet】img2imgのワークフローの解説を公開!
 更新記事
4/1に服装のプロンプト(呪文)一覧を更新!
3/30に【ComfyUI】img2imgのワークフローの解説を更新!
3/25にポーズのプロンプト(呪文)一覧を更新!

Stable Diffusion Web UI(Automatic1111)の拡張機能「AnimateDiff」の使い方です。長尺の動画の作り方、MotionLoRAの併用方法、MP4の書き出しエラーの対処法などを掲載しています。一貫性のある短いアニメーションならこの拡張機能がおすすめです。

記事の更新

2023/10/23: Closed loopの内容を追加

AnimateDiffアップデート情報

2023/10/08v1.9.0: Prompt travelの機能が追加されました。

目次

AnimateDiffとは?

モーションや元の動画がなくても、一貫性の高い(安定した)アニメーションを作ることができます。どんな長さの動画でも作ることができ、また、元の動画から動画を作るVideo to Videoも生成可能になりました。

実際に使ってみた感想

まず、画像に比べると一段階品質が落ちます。しかしモーションモジュールのアップデートで改善される余地は十分にあります。

また、品質が落ちるだけでなく、モデルやLoRAによっては改善不可能な動画が生成されることが多々あります。

例えばこのような画像が生成できるモデルとLoRAで、動画を作ってみると

このように画風、服装、色合いなど、全ての要素が変わってしまいます。

Clip skip 1

Clip skip 2

なのでAnimateDiffに合うモデルを探す作業、もしくはプロンプトの改善が必要になってきます。

ですが試行錯誤しようにも、実は1フレームだけで書き出せず、最低でも16フレームは書き出さないとまともな画像が生成されず検証すらできないので非常に時間が掛かってしまいます。

AnimateDiffのインストール方法

もしStable Diffusionを知らない方がいましたら「0」から上級者になれるチュートリアルの記事を書いているので、参考にしてみてください。

AnimateDiff本体

Extensionsタブから

Availableタブに移動してLoad from:をクリックした後に

animatediffと入力すると

候補が出てくるのでこちらをインストールしましょう。
AnimateDiff本体になります。

インストールした後はApply and restart UIから適用して再起動しましょう。

インストールするとtxt2imgとimg2imgにAnimateDiffのメニューが追加されます。
※img2imgは現在、開発者によってテストすらされていない機能です。基本的にtxt2imgで生成しましょう。

i2iでも生成できるようになっていました。使い方追記予定。

Motion module

AnimateDiffを使うために「Motion module」をまずはダウンロードする必要があります。

Motion moduleはいくつか存在します。

AnimateDiffの作者が作っているモジュールです。様々な方法でダウンロードできます。

mm_sd_v14.ckpt
mm_sd_v15.ckpt
mm_sd_v15_v2.ckpt

HuggingFace, CivitAI, Google Drive

AD_Stabilized_Motion by @manshoety

mm-Stabilized_high.pth: 基本モデルに比べて非常に安定していますが、動きが非常に少なくなる代償があります。

mm-Stabilized_mid.pth: 基本モデルよりも少し安定しています。

https://huggingface.co/manshoety/AD_Stabilized_Motion/tree/main

TemporalDiff by @CiaraRowles

  1. TemporalDiff:
    • TemporalDiffは、元のAnimateDiffのウェイトをより高解像度のデータセット(512×512)でのファインチューニングの結果です。
  2. 動画の整合性:
    • これまでのテストでは、元のウェイトよりも動画の整合性が高いことが示されています。
  3. Strideの調整:
    • 動きのなめらかさを向上させるために、Strideを4フレームから2フレームに調整しました。
  4. 現在の制限:
    • 使用したデータセットのラベリングに問題があったため、プロンプトを解釈する能力が若干低下しています。
    • この問題を修正した新しいバージョンを近日中にリリースする予定です。

https://huggingface.co/CiaraRowles/TemporalDiff/tree/main

Hotshot-XL by @hotshotco

SDXLに対応したモジュール

https://huggingface.co/hotshotco/Hotshot-XL/tree/main

Tips: HuggingFaceの場合、右の小さい矢印からダウンロードできます↓


Motion Moduleがダウンロードできたら、下記のパスに配置してください。

stable-diffusion-webui/extensions/sd-webui-animatediff/model/

配置できたら

回転マークから更新すれば再起動することなくModuleを選択できるようになります。

AnimateDiffの使い方

使う前に注意点があります。

この設定をしないと、生成した画像が一貫性を持たずに二つに分かれてしまいます。

Automatic1111の設定を確認しましょう。

SettingsOptimizationsに移動

Pad prompt/negative prompt to be same length
Batch cond/uncond

この二つにチェックを入れてApply Settingsで保存しましょう。

Apply SettingsのあとはReload UI(再起動)は必要ありません。

追記: Batch cond/uncondはチェックを外してもよくなりました。公式によると、VRAM使用量が変化するみたいです。具体的には5.31GBから4.21GBへと減少、しかし少し生成する時間が長くなるとのことです。

実際にどれくらい生成時間が伸びるのかと思って検証してみましたが、あまり影響はないみたいです。

使ってみる

Enable AnimateDiffにチェックを入れることでAnimateDiffを有効化することができます。

まずデフォルト設定で生成して問題がないか確かめてみましょう。

16枚の画像が生成され、2秒のアニメーションが生成されます。

注意点

・一度エラーを吐くとcmdを再起動しないとノイズが生成されます。

AnimateDiffの設定

Number of frames フレームの数を増やすことができます。上限はありません。

FPS 1秒あたりのフレーム数です。

例:「Number of frames」が128フレームであり、FPSが8の場合、動画の全体の長さを計算することができます。128フレームを1秒あたり8フレームで割ると、動画の長さは16秒になります。

Display loop number (0 = infinite loop) GIFアニメーションが何回繰り返し表示されるかの回数。
デフォルトは「0」で無限ループとして生成されます。 0以外必要ある・・・?

Closed loop 始まりのフレームと終わりのフレームが同一の画像になります。ループのように繰り返し再生できるようになります。ただし条件があって、Context batch sizeよりもNumber of framesが大きくないと動作しません。

選択肢の違い

N: 完全にclosed loopを適用しない。フレームの数がContext batch sizeより小さく、0でない場合にのみ利用可能。

R-P:

  • 拡張機能はclosed loopのコンテキスト数を減らすように試みます。
  • しかし、Prompt Travelはclosed loopに補間されない

R+P:

  • 拡張機能はclosed loopのコンテキスト数を減少させる試みをします。
  • この選択では、Prompt Travelの移動はclosed loopとして補間されます

A:

  • 「A」を選択すると、拡張機能は積極的に最後のフレームを最初のフレームと同じにしようとします。
  • この「A」の選択をすると、AnimateDiffは元のフレームのリストに逆順のフレームのリストを追加して、closed loop(クローズドループ)を形成します。これは、フレームの数(Number of frames)がContext batch size以下の場合にのみ効果的です。
  • さらに、Prompt Travelは、closed loopとして補間されます。

Context batch size 一度にモーションモジュールに渡されるフレームの数を指します。つまり、一度の計算や処理で同時に扱われるフレームの数を設定する値です。デフォルト設定が一番結果が良くなりやすいです。

Stride 大きなStride値を指定すると、動きや変化をサンプリングする間隔が広くなります。連続した画像ではなく、より独立した画像が生成される可能性が高くなります。「1」以外で使う必要はない気がします。

Overlap

一般的なOverlapについての説明を見ていきましょう。

Overlapの値を大きくすると、次のような影響が考えられます:

  1. 連続性の向上: より多くのフレームが重複することで、生成されるフレーム間の連続性や一貫性が向上する可能性があります。
  2. 処理時間の増加: 重複するフレーム数が増えると、それを考慮して処理を行う必要があるため、処理にかかる時間が増加する可能性があります。
  3. メモリ使用量の増加: 重複するフレームを保存・処理するため、メモリ使用量が増えることが考えられます。

では実際にどう影響するか実験しました。

「0」Time taken: 1 min. 0.6 sec.

「1」Time taken: 1 min. 23.1 sec.

「2」Time taken: 1 min. 20.1 sec.

「4」Time taken: 1 min. 22.2 sec.

「8」Time taken: 1 min. 43.5 sec.

「12」Time taken: 3 min. 6.1 sec.

「-1」Time taken: 1 min. 22.2 sec.

デフィルトの”-1″は「4」に設定されるので、「4」と「-1」は同じ結果になっています。

VRAMの消費量は一切変わりませんでしたが、生成時間が大きく伸びていますね。ですが「連続性の向上」という変化は正直あまりわかりません。個人的には「2」で生成すると安定したアニメーションが生成されやすい気がしますが、皆さんはどうでしょうか。

Save 保存する形式を選択できます。MP4で書き出す際にエラーが出る場合の対処法は記事の一番下に記載しています。

MP4は4秒の動画で800KBほどで比較的軽量です。GIFだと7MBです。

Reverse 逆順にしたフレームを元の映像やアニメーションの後ろに追加します。動画の長さが倍になります。

これは見たほうが早いですね。

Add Reverse Frame
Remove head
Remove tail

3つともチェックして使う形が基本です。

Automatic1111の設定

Batch countで生成する回数を指定することができます。

Batch sizeは内部的に「GIFのフレーム数」に置き換えられます。Animate Diffを使う際はBatch sizeは使わないようにしましょう。

Hires.fixも使うことができますが、非常に多くのVRAMを必要とします。生成するサイズに注意してください。


Hires.fixについての記事


MotionLoRA

[2023/09/25] にリリースしたMotionLoRAを使うことで、カメラの動きを調整することができます。

LoRAと同じように使います。公式のMotion moduleではないと正常に動きません。mm_sd_v15_v2.ckptなど

Zoom In

Zoom Out

Rolling Anti-Clockwise

Rolling Clockwise

Pan Up

Pan Down

Pan Left

PanRight

Prompt travel

[2023/10/08]に新しく追加された機能です。

Prompt travelは拡張機能のDynamic Promptsと併用して利用することはできません。

チェックはデフォルトで有効化されているので、この機能を使う際は無効化しておきましょう。

この機能はフレームの途中でプロンプトを変化させることができます。

プロンプトの記述を変えることで有効化することができます。

a girl, pink hair
0: sleepy
16: animal ears
blue eyes
  1. ヘッドプロンプト (Head Prompt):
    • 最初の行は「ヘッドプロンプト」と呼ばれるオプションです。
    • ヘッドプロンプトは一行も書かなくてもよいし、一行以上書くこともできます。
    • 例: “a girl, pink hair”
  2. プロンプト補間 (Prompt Interpolation)
    • 二行目、三行目にあるのは「プロンプト補間」です。
    • これは、アニメーションのフレームのように、特定のタイミングでの状態を示すためのものです。
    • “フレーム数: プロンプト”のフォーマットで書きます。
    • 例:
      • “0: sleepy” はフレーム0での状態として「眠い状態」を示しています。
      • “16: animal ears” はフレーム16での状態として「動物の耳」を示しています。
  3. テールプロンプト (Tail Prompt):
    • 最後の行は「テールプロンプト」と呼ばれ、これもオプションです。
    • テールプロンプトは一行も書かなくてもよいし、一行以上書くこともできます。
    • 例: “blue eyes”

正常に機能していると、cmdに「You are using prompt travel.」と表記されます。

注意点

・Prompt Travel使用時に拡張機能のDynamic Promptsと併用して利用することはできません。

また、3行目以降も4、5、6と無限に追加することが可能です。

0: orange hair, orange theme, grin
32: animal ears, green theme, showing teeth
64: blue hair, blue theme, closed eyes
96: black hair, purple theme, red eyes, open mouth
124: orange hair, orange theme, grin

MP4書き出しエラーの対処法

WindowsでAutomatic1111を使っている方はMP4で書き出す際に下記のようなエラーが発生する場合があります。

仮想環境(venv)に「ffmpeg」をインストールすることでMP4で書き出すことができるようになります。

STEP

まずstable-diffusion-webuiフォルダに移動します。

webui-user.batがある場所ですね。

STEP

パスにcmdと入力しエンターキーを押します。

STEP

これで現在のディレクトリでコマンドプロンプトを開くことができたので、次のコードを入力して”venv“をアクティベートします。

venv\Scripts\activate

(venv)が表示されていればアクティベートされています。

STEP

この状態で、下記のコードを入力してffmpegをインストールします。

pip install imageio[ffmpeg]

これでMP4で保存できるようになります。

Hires.fix時のエラーの対処法

RuntimeError: CUDA error: invalid configuration argument CUDA kernel errors animatediff~

このようなエラーが出た場合はxformersを無効化しましょう。


掲示板

コメントする

このフォームは reCAPTCHA によって保護されており、Googleのプライバシーポリシー利用規約が適用されます。
目次