見出し画像

【AIアニメ】ComfyUI AnimateDiff でInpaintを試す

  • 上記の例では、静止画のうちマスクした部分が動画化されています。

  • この記事では上記のワークフローを参考に「動画の一部をマスクし、inpaintで修正する」方法を試してみます。


必要な準備

ComfyUI本体の導入方法については、こちらをご参照ください。
今回の作業でComfyUIに追加しておく必要があるものは以下の通りです。

1. カスタムノード

2. ControlNet

  •  ControlNet未導入の場合は、以下のモデルをダウンロードします。保存先は"/ComfyUI/models/controlnet/"です。

  • 今回はControlNetのInpaintに加えてDepth(深度情報)を併用します。

  • 描画を安定させるためなので、DepthではなくLineartやOpenposeでもいいと思います。

3. モーションモジュール

  • 今回のワークフローでは「temporaldiff-v1-animatediff.ckpt」を使っています。

  • ダウンロード先は"/ComfyUI/custom_nodes/ComfyUI-AnimateDiff-Evolved/models/"です。

4. 画像生成モデルとVAE

  • 好きなものを使います。保存先は"/ComfyUI/models/checkpoints/"と"/ComfyUI/models/vae/"です。

マスク画像とDepth画像の用意

  • 今回は元動画から適当なフレームを切り出し、これをもとにマスク画像とDepth画像を用意しました。これを全てのフレームに適用します。

  • ただし構図が変わる動画の場合は、マスクをフレームごとに作成する工夫が必要になりそうです。

  • マスク画像は、ペイントソフトの消しゴムで適当に人物を削り、透明化してPNG形式で保存したものです(ComfyUI上でもマスクできます)。

  • Depth画像の作成方法については、こちらの記事で紹介しています。

  • 参考までに今回使用した素材として、元動画(16フレーム分割済み)、マスク画像(コピー16枚)、Depth画像は以下にあります。

ワークフロー

  • 今回使用したワークフローはこちらです。デスクトップにダウンロードし、ComfyUI画面にドラッグ&ドロップすると読み込めます。

  • ワークフロー左下のノードで、元動画フレーム(input)とマスク画像(mask)を置いたディレクトリを指定します。

  • なおマスク画像は同じものをコピーして16フレーム分にしています(今回は構図が一定の動画のため)。

  • 「Queue Prompt」で実行すると、元動画とマスク画像をControlNet Inpaintで処理し、マスク部分が置き換わった動画が生成されます。

アウトプット

元動画の全身を修正
  • マスクの範囲を変えることで、顔だけを修正したり、人物全体を消すこともできます。

元動画の顔だけを修正
元動画からキャラを消去
  • inpaintでは、どうしてもマスクした範囲がぼやけてしまい、つぎはぎ感のある動画になりがちです。

  • このような場合、生成動画を(必要に応じて縮小したあと)アップスケールにかけると、マスク箇所が目立たなくなります。

関連記事

  • ComfyUI AnimateDiffについての記事は、以下のnoteにまとめています。