酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

NovelAI を使って自撮り動画をアニメ化しよう! #novelai

仕事で ffmpeg を使う機会があり、ffmpeg を使えばなんでもできることがわかった。NovelAI と組み合わせることで自撮り動画をアニメ化できるのではないかと考えた。

NovelAI では img2img が有償のため、変換処理をスクリプト化する前に、まずは想定している処理を手動でやってみることにした。特に秘匿するようなことはないため、自撮り動画をアニメ化する手順を紹介する。手間はかかるが誰にでもできるだろう。

ちなみにさくさんは白色のタンクトップに黒ズボンで寝ている。

NovelAI を使って自撮り動画をアニメ化する

手順としては以下の通りである。

  1. iPhone で動画撮影
  2. ffmepg で 動画 から 静止画 へ変換
  3. NovelAI の img2img を使ってイラスト変換
  4. ffmpeg で 静止画 から 動画 へ変換

事前準備

ffmpeg をインストールしておく。macOS で Homebrew を導入済みであれば ffmpeg のインストールはすぐ終わる。

1. iPhone で動画撮影

動画は iPhone で適当に自撮りする。背景はシンプルな方が良いので壁やカーテンを背にした方が良い。背景にあるモノがノイズとなってしまう。

あまり派手な動きだと人体が崩れるので無理のない動きにとどめる。

2. ffmepg で 動画 から 静止画 へ変換

NovelAI の制限で大きな動画は変換できない(またはAnlasを消費してしまう)ため、あらかじめフレーム数を減らしておき、かつ動画の縦幅を 768px にしておく。これは Anlas を節約するためなので、Anlasにゆとりがある方は任意のサイズにすると良い。

ffmpeg -i input.mp4 -r 10 -vf "scale=-1:768" source.mp4

10FPSまで減らした動画を確認して、動きに問題がなければ、動画を静止画に変換する。

ffmpeg -i source.mp4 -vcodec png source\img_%d.png

今回は約2秒の動画だったので、出力された静止画は20枚ほどであった。これ以上枚数が増えるのであれば手作業では厳しい。

3. NovelAI の img2img を使ってイラスト変換

プロンプトは単純に 1girl, green hair とした。緑髪には特に理由はなく、黒髪が緑になるのか試したかったからだ。元動画に合わせて適切なプロンプトにする。

適当な画像を 1枚 使って、好みの画風が出るまでimg2img による生成を繰り返し、シードをメモした。

その後は静止画を1枚ずつ、シードを固定して img2img を繰り返した。混み合ってる時間帯だったのでレスポンスが返ってくるまで時間がかかった。もし自動化するのであればこの工程の手間が一番省けるだろう。

NovelAI で変換した画像のファイル名は連番にしておくこと。ここでは img_12.png などとなることを想定している。

4. ffmpeg で 静止画 から 動画 へ変換

ffmpegを使って静止画をまとめて動画へ変換した。10fpsの静止画から10fpsの動画を生成している。

ffmpeg -r 10 -i source\img_%d.png -vcodec libx264 -pix_fmt yuv420p -r 10 output.mp4

ここでは音声は抜いたままのため無音動画になる。音を合成したい場合は別途調べて欲しい。

完成!

以上で、自撮り動画のアニメ化ができた。

リングフィットによる筋トレの成果が出てしまったのか肩幅の広い胸筋のある女の子になってしまった。

残念ながら課題も多い……

簡単にアニメ化できたが課題も多い。

  • Strength を上げないと元画像に引っ張られてしまう
  • Strength を上げると画風の統一感を保てない

素材がおっさんであるため可愛くするためには Strength を上げざるをえず、Strengthを上げてしまうことで画風の統一性が破綻してしまう。おっさんと kawaii は反発するのだ。

元々あるアニメ動画をNovelAIを使って画風変換したり、3Dモデル動画のアニメ化の場合は、Strengthを下げることができるため、もっと画風を統一できるのではないかと思う。

自分の好みのキャラを動画をアニメ化したいのであれば、MMDを使ったり「カスタムキャスト」を使って、3Dアニメを作成後 NovelAI を使って変換すると良いだろう。環境の整えやすさでいえばカスタムキャストを使うのが良いかもしれない。

追記

はてなブログに動画はアップロードできないので、Twitter にアップロードした動画をモーメントでまとめておいた。

twitter.com