at backyard

Color my life with the chaos of trouble.

DensePoseでモーションを自作して、MagicAniamteで遊んでみた

一枚の画像とモーション動画で動画を生成できるMagicAniamteが今週は盛り上がっていた

showlab.github.io

MagicAnimateを私はGoogle Colab経由で試していた。
プリセットなども用意されているので、それだけでも楽しめるのだが、せっかくモーションと一枚の静止画を読み込ませることで作りたいものが作れるので、カスタムモーションを作る方法を探っていた

人物が写っている動画からのモーション抽出だが、これはMetaが以前発表していたDensePoseというもので抽出できるらしい

github.com

で、こちらについてもGoogle Colab上で実行できる仕組みを作っている方がいたので、そのプロジェクトをforkしてGoogle Colab上でGradioのWeb UI経由から操作できるようにした
(この修正はPRを送っているが残念ながら反応はもらえていない)

github.com

オリジナルのモーションを作成してMagicAnimateで動画を作成する方法

以上のようなことを調べた結果、オリジナルのモーションを利用してMagicAnimateで動画生成を行うためには

  • 動画をDensePoseを用いてモーション抽出を行う
  • そのモーションを用いてMagicAnimateで実際に動画生成を行う

という手順を踏む必要があるとわかったので、それらの手順を実行するColabノートブックを作成した

github.com

Google Colabのランタイム設定について

ランタイムの設定だが推奨は v100 + ハイメモリ となる。
ハイメモリにしていない場合、うまく動画が生成できなくなることがあるようだ。
(こちらについてはコメントでご報告いただき判明しました。ありがとうございます)

動画制作のための手順

上のリポジトリ内にあるColabノートブックを実行するだけで良い。

https://github.com/shinshin86/magic-animate-craft-with-colab/blob/main/colab.ipynb

1つ目のコードセルを起動すると、フォーク版の Vid2DensePose が起動する
画面はシンプルなのでスクリーンショットなどは載せないが、モーション抽出したい動画をアップロードして処理を実行すれば、それでモーション動画ができあがる。

現状MagicAnimate側に渡すモーション動画はサイズが 512x512FPS25 であることが最適であるようだったので(誤っていたらコメントください)、生成されるモーション動画は強制的にそのような値になるようにした。

次に2つ目のコードセルを実行すると、これまたフォーク版の magicanimate-hf が起動する。
(オリジナル版にあったエラーの修正と、機能追加もしている。エラーの方はPRを送っているが、こちらも残念ながらコメントはもらえていない...)

github.com

アプリが起動したら、画像とモーション動画をアップロードして処理を実行すれば良い。

画像がなければモナリザなど、プリセットの素材もあるので、そちらで試しても良い

自撮りした動画でモーションを作って、モナリザにピースさせてみた

というわけで、遊んでみてください。