問題の概要:AnimateDiffで動画生成時のフレーム制御エラー
ComfyUIのAnimateDiffを使用して動画を生成する際、以下のようなフレーム制御に関する問題が頻繁に発生します。
- 生成される動画のフレーム数が想定(例:16フレーム)よりも少ない(例:8フレーム)
- 「AnimateDiff Loader」ノードで設定した「ビデオ長(frames)」が無視される
- 動画が生成されず、静止画のみが出力される
- エラーメッセージは出ないが、意図したアニメーションが得られない
具体的には、ワークフローを実行してもコンソールにエラーは表示されず、生成される動画ファイル(.mp4または .webp)のフレーム数が設定値と一致しないという、初心者を特に悩ませる「サイレントな不具合」です。
原因の解説:複数の設定箇所の不一致
この問題の根本原因は、ComfyUIとAnimateDiffのフレーム制御に関する設定が複数のノードに分散しており、それらの設定が互いに矛盾していることです。AnimateDiffは単体のモデルではなく、ComfyUIの「ワークフロー」というパイプライン内で動作するため、各パーツの連携が重要になります。
主な原因は以下の3点です。
1. 「AnimateDiff Loader」ノードと「KSampler」ノードのステップ数不一致
「AnimateDiff Loader」ノードで「ビデオ長(frames: 16)」を設定しても、「KSampler」ノードの「ステップ数(steps)」が少なすぎると(例:20ステップ)、すべてのフレームを計算するのに十分な「ステップの余裕」がなくなります。結果、中間フレームがスキップされ、短い動画が生成されます。
2. フレーム数とバッチサイズの関係の誤解
AnimateDiffは内部的にバッチ処理を行います。「ビデオ長(frames)」の設定は、このバッチサイズを指定しています。しかし、この値が「Empty Latent Image」ノードで生成する潜在空間のバッチサイズと一致していない場合、正しく処理されません。
3. 出力ノード(Save Image/Video)の設定見落とし
動画ファイルとして保存するためのノード(例:「ComfyUI-VideoHelperSuite」のノード)で、フレームレート(fps)や出力フォーマットの設定が不適切な場合、プレビューでは正しく見えても、保存されるファイルのフレーム数が失われることがあります。
解決方法:ステップバイステップでの設定統一
以下の手順で、すべての関連ノードの設定を統一することで問題は解決します。
ステップ1: ワークフローの基本構造を確認
AnimateDiffを使用した基本的な動画生成ワークフローは以下のノードで構成されます。
- Checkpoint Loader(Stable Diffusionモデル読み込み)
- CLIP Text Encode(プロンプト入力)
- Empty Latent Image(潜在空間生成) ← 重要
- AnimateDiff Loader(モーションモジュール読み込み) ← 重要
- KSampler(画像生成)
- VAE Decoder(潜在空間を画像に変換)
- 動画保存ノード(Save Animationなど) ← 重要
ステップ2: 「Empty Latent Image」ノードの設定
このノードで、生成する動画の幅(width)、高さ(height)、そしてバッチサイズ(batch_size)を設定します。この`batch_size`が、生成したい動画のフレーム数になります。
設定例:
width: 512
height: 512
batch_size: 16 # ここで16フレームの動画を指定
ポイント: `batch_size`は「AnimateDiff Loader」で設定する「ビデオ長(frames)」と完全に一致させる必要があります。
ステップ3: 「AnimateDiff Loader」ノードの設定
「AnimateDiff Loader」ノードをダブルクリックし、詳細設定を開きます。以下のパラメータを確認・設定します。
必須設定:
video_length (frames): 16 # 「Empty Latent Image」のbatch_sizeと一致させる(例: 16)
format: 選択肢から適切なものを選ぶ(例: "default" または "movement")
推奨設定(初期トラブル時):
loop: 有効(Enabled) # ループ補間を有効にすると滑らかになりやすい
closed_loop: 無効(Disabled) # 初心者は無効推奨
ステップ4: 「KSampler」ノードのステップ数調整
「KSampler」ノードの「ステップ数(steps)」は、「Empty Latent Image」の`batch_size`(フレーム数)よりも十分に大きい値に設定します。目安は以下の通りです。
steps >= (batch_size * 2) 以上が安全
例:batch_size=16(フレーム) → stepsは32以上を推奨
これは、サンプラーが各フレーム間の変化を計算するのに十分な「時間」(ステップ)が必要なためです。ステップ数が少なすぎると、フレームが省略されて生成されます。
ステップ5: 動画保存ノードの設定(例:Video Helper Suite)
「VAE Decoder」の出力を動画ファイルに保存するノードを正しく設定します。「ComfyUI-VideoHelperSuite」をインストールしている場合の例です。
ノード: VHS_VideoCombine
設定例:
frame_rate: 8 # 1秒あたりのフレーム数。fps=8、フレーム数=16なら動画長は2秒。
loop_count: 0
filename_prefix: "AnimateDiff_Output"
format: "video/h264-mp4" # MP4形式で保存
重要: このノードの入力として、単一の画像ではなく、画像のバッチ(リスト)が接続されているかを確認してください。バッチ接続されていないと、連続したフレームとして認識されず、動画になりません。
コード例・コマンド例:問題のあるワークフローと修正後
以下は、典型的な設定ミスとその修正を示す擬似コードです(実際のComfyUIはJSONワークフローですが、概念を示します)。
問題のある設定(フレーム数が半分になる例)
# ❌ 間違った設定例
Empty Latent Image:
batch_size = 16 # 16フレームを意図
AnimateDiff Loader:
video_length = 16 # 一見合っているが…
KSampler:
steps = 20 # 16フレームを20ステップで処理するのは不足!
# 結果: 約8-10フレーム程度しか生成されない
修正された設定
# ✅ 正しい設定例
Empty Latent Image:
width = 512
height = 512
batch_size = 16 # フレーム数
AnimateDiff Loader:
video_length = 16 # batch_sizeと一致
format = "default"
KSampler:
steps = 35 # batch_size(16)の2倍以上。余裕を持たせる。
cfg = 8.0
sampler_name = "euler"
scheduler = "normal"
# 保存設定 (Video Helper Suite 使用例)
VHS_VideoCombine:
input_frames = [画像バッチリスト] # 16枚の画像がリストとして入力
frame_rate = 8 # 8fps
format = "video/h264-mp4"
# 出力: 2秒間(16フレーム / 8fps)の動画ファイル
まとめ・補足情報
ComfyUIのAnimateDiffでフレーム制御の問題が発生した場合、まずは「Empty Latent Imageのbatch_size」、「AnimateDiff Loaderのvideo_length」、「KSamplerのsteps」の3点セットの関係性を疑いましょう。これらを整合させるだけで、大部分の問題は解決します。
追加のトラブルシューティングTips:
- モデルの互換性: 使用しているStable Diffusionチェックポイント(モデル)がAnimateDiffと互換性があるか確認してください。特にSDXLモデルは専用のAnimateDiffモジュールが必要な場合があります。
- メモリ不足: フレーム数(batch_size)や解像度を大きくしすぎるとGPUメモリ不足(OOMエラー)になり、処理が途中で止まることがあります。フレーム数は8, 16, 24などから試し、解像度は512×512が無難です。
- カスタムノードの更新: AnimateDiff LoaderやVideo Helper Suiteなどのカスタムノードは更新が頻繁です。マネージャーから最新版に更新してみてください。
- ワークフローのインポート/エクスポート: 正常に動作するワークフローJSONを一度エクスポートし、テキストエディタで`batch_size`、`video_length`などのキーワードを検索して、すべての設定値を確認する方法も有効です。
AnimateDiffは強力な動画生成ツールですが、ComfyUIの「ノードを繋ぐ」という性質上、設定の統一が最も重要なポイントです。基本の3点セットを押さえ、段階的に複雑な設定に進むことで、思い通りのアニメーション生成が可能になるでしょう。