目次
結果
AI変換した動画
元動画
りりり様のダンス動画をお借りしました(https://www.youtube.com/watch?v=mHuiJGGAJoE)
TemporalKitとは?
「TemporalKit」とは、安定した拡散レンダリング(Stable Diffusion Render)に時間的安定性を追加するためのオールインワンソリューションで、automatic1111という拡張機能を通じて機能します1。
このツールを使用する前に、FFMPEGをパスにインストールする必要があります。
TemporalKitの使用に関する具体的なデモやチュートリアルは、以下のリンクで確認できます:
- 個別のバッチによるデモ:https://twitter.com/CiaraRowles1/status/1645923461343363072
- バッチデモ:https://mobile.twitter.com/CiaraRowles1/status/1646458056803250178
- Ebsynthチュートリアル:https://twitter.com/CiaraRowles1/status/1648462374125576192
- Ebsynthスプリットフレームチュートリアル:https://www.youtube.com/watch?v=z3YNHiuvxyg&ab_channel=CiaraRowles
TemporalKitの拡張機能には以下のような値が含まれます:
- FPS:ビデオが抽出され、生成されるフレームレート(Frames Per Second)です。
- batch_Size:各キーフレーム間のフレーム数。例えば、FPSが30で、バッチサイズが10の場合、1秒あたり3つのキーフレームを作成し、残りを推定します。
- per side:プレートごとのフレーム数の平方根。例えば、per sideの値が2ならば4つのプレート、3ならば9つのプレート、4ならば16つのプレートを作成します。
- Resolution:各プレートのサイズ。この値はper sideの倍数に設定することを強く推奨されています。
その他、プレートのフォルダを生成するためのバッチ設定、最大フレーム数、ボーダーフレーム数、バッチフォルダ、出力解像度などの設定項目があります1。
TemporalKitを使用する上でのよくある質問として、「ビデオがぼやける(smearing)」という問題が挙げられています。
これに対する答えとして、FPSを高く設定するか、バッチ数を低く設定することが推奨されています。
キーフレームが近ければ近いほど、アーティファクト(不要な効果やノイズ)が少なくなります。
AI変換動画の作り方
基本的にはAI変換したい動画を用意し、その動画を元にどのような絵柄に変換するか確認して、OKであればTemporalKitの拡張機能を使って外部ツールに取り込むための素材を準備し、準備ができたら取り込む形となっています。
実際に行ったこと
環境
OS | Windows 11 (22HS) |
CPU | Core i7-11700K |
メモリ | 16GB |
GPU | RTX 3070 8GB |
前提条件
- Stable Diffusion WebUI(AUTOMATIC1111)がインストールされていること
やったこと
今回使うソフトウェアのダウンロード
以下2点のダウンロードおよび、初期セットアップが必要になってきます。
- EbSynth
- 生成した絵のように動画を変換するために必要なソフトウェア
- FFmpeg
- 動画を静止画に細切れするために必要なライブラリ。
- TemporalKitが内部的に使用するものなので起動等はさせません。
EbSynthはこちらからダウンロードできます。
FFmpegはこちらからダウンロードできます。
FFmpegの場合、初期セットアップが必要になります。下記記事が参考になりますので、ぜひお試しください。
TemporalKitのインストール
Stable Diffusion WebUI(以下、SDWebUI)からインストールすることができます。
ExtensionsタブのInstall from URLより、URL for extension’s git repositoryの欄に下記URLを入力します。
https://github.com/CiaraStrawberry/TemporalKit
入力できたらInstallボタンでインストールが完了します。
完了したら、SDWebUIの再起動を行ってください。行わないとTemporalKitのタブが表示されません。
動画の準備
変換したい動画を用意しましょう。また、なるべく動画は特定のディレクトリの中に入れておいた方がいいです。ディレクトリごと指定したりとディレクトリ単位で操作が必要になってくるので、そのディレクトリに関係ないファイル等が混ざっていると邪魔になります。
今回はCドライブ直下にsampleというディレクトリを作成し、動画を入れるようにします。
SDWebUIで動画を分割
実際に作業に入っていきます。
Temporal-KitタブのPre-Processingタブを開きます。
Input Videoのところに先ほどディレクトリごと準備した中の動画を選択もしくはドラッグアンドドロップしましょう。
動画が取り込めたら、どう分割するかの設定に入っていきます。
Slides | 2 | フレーム数の平方根です。たとえば、片面の値が 2 の場合、プレートは 4 枚、プレートは 3 枚、9 枚、プレートは 4 枚、16 枚になります。数が多い程、1回の生成で大量に画像の変換ができます。 |
Height Resolution | 1280 | 動画の高さの数値の倍数に合わせます。この数値が高いほど動画内の顔などの崩壊等がなくなります。ただ、その分、スペックを必要とします。当環境ではVRAMが8GBだったので、等倍の1280にしました。 |
frames per keyframe | 5 | すみません、調べてみましたがあまりよくわかっていないので5にしたままにしています。 |
fps | 30 | おそらく動画のfpsを入力します |
EBSynth Mode | ✅ | EBSynthで取り込むモードにするかです。✅を入れます。 |
Target Folder | C:\sample | 動画が格納されているディレクトリ(フォルダ)を指定します。 |
Batch Run | ✅ | バッチで動かすかどうかです。今回は✅を入れます |
Max Key frames | 5 | プレートのフォルダーを生成するときに、取得したい上記の fps でのフレーム数を取得し、(各サイド * サイドごと * バッチ サイズ) のグループに分けてプレートに分割します。 |
Border Key Frames | 2 | プレートのフォルダーを生成するときに、取得したい上記の fps でのフレーム数を取得し、(各サイド * サイドごと * バッチ サイズ) のグループに分けてプレートに分割します。 |
Split Video | ✅ | 動画を分けてEBSynthに合成させるかです。今回は細かく様子を見てやっていきたいので✅を入れます。 |
設定が完了したら、右側のRunで実際に分割を開始します。
分割が完了すると、動画の秒数、設定値にもよりますが下記のようなフォルダ・ファイルが出来上がると思います。
変換する画風の作成&確認
動画を分割できたら、分割した1枚を元に大体こんな風に変換したいというのを決めていきます。
その前に1つ設定をしておく項目があります。
今回、ControlNetも活用するので、ControlNetを利用する場合は、Do not append detectmap to outputにチェックを入れておきましょう。
チェックを入れておかないと、ControlNet各種モデルで検知したボーンの画像やcannyの画像が変換動画に含まれてしまうようになります。
img2imgのタブへ行き、そこの画像指定で用意したフォルダの0番のinputの中の1枚を適当に選び貼り付けます。
あとは普段のimg2imgと同様で変換していきます。今回設定したパラメータを下記に記しておきます。
Resize mode | Just resize | |
Sampling method | DPM++ SDE Karras | |
Sampling steps | 20 | |
Width | 720 | |
Height | 1280 | |
CFG Scale | 7 | |
Denosing strength | 0.6 | 重要なパラメータになります。値が小さいほど元画像を参考にするかなので、小さめに設定すると違和感なく変換されます。 |
Batch count | 1 | |
Batch size | 1 | |
ControlNet Unit1 – Enable | ✅ | |
ControlNet Unit1 – Low VRAM | ✅ | |
ControlNet Unit1 – PixelPerfect | ✅ | |
ControlNet Unit1 – ControlType | All | |
ControlNet Unit1 – Preprocessor | lineart_realistic | 元画像の線画を吐き出してそれを元に変換していくので、このプリプロセッサーとこのあとのモデルは必須級です。 |
ControlNet Unit1 – Model | control_v11p_sd15_lineart | |
ControlNet Unit2 – Enable | ✅ | |
ControlNet Unit2 – Low VRAM | ✅ | |
ControlNet Unit2 – PixelPerfect | ✅ | |
ControlNet Unit2 – ControlType | All | |
ControlNet Unit2 – Preprocessor | depth_zoe | 背景がばらつきやすいので、このControlNetを使うことによって人物と背景を分離させて手前のものだけを変換することにします。 |
ControlNet Unit2 – Model | conrol_v11p_sd15_depth | |
パラメータを入れることができたら、実際に変換して確認しましょう。確認ができたらシードを固定しておきましょう。これをしておかないと、絵柄がバラバラになってしまいます。
Ebsynthに取り込むための素材作成
前段がOKそうであれば、次は全部の画像をバッチで変換していきます。
img2imgのBatchを開きます。
今回であれば、
Input directory | C:\sample\input |
output directory | C:\sample\output |
inpaint batch mask directory | [空] |
Controlnet input directory | C:\sample |
ここまで入力できたら、実行してきましょう。
実行はスペック、動画の長さにもよりますが1時間や2時間かかりますので気長に待ちましょう。
変換が完了したら、Temporal-KitタブのEbsynth ProcessタブでEbsynth向けに変換を行います。
Input FolderにはC:\sampleと入力し、下のread_last_settingsを押すとフォルダ内を読み込んでくれます。
読み込んだら、read_last_settings下のパラメータをいじっていきます。今回はデフォルトのままにしました。
設定が完了しましたら、prepare ebsynthを押します。すると、ebsynthで利用するための素材等がフォルダに生成されます。
Ebsynthでの変換
Ebsynthを起動します。
最初に用意した、0フォルダ内のframesフォルダをVideoにドラッグ&ドロップします。
次に、0フォルダ内のkeysフォルダをkeyframesにドラッグ&ドロップします。
画面下部あたりにある、RunAllをクリックすると、適用が開始されます。
SDWebUIでEbsynthの変換後ファイルを統合
Ebsynthで変換が完了しましたら、先ほどのTemporal-KitタブのEbsynth Processタブでrecombine ebsynthというボタンがあったと思います。それをクリックすると、ebsynthで変換された画像たちを統合して動画を生成してくれます。
生成された動画は0フォルダの中のcrossfade.mp4がそうなります。
Temporal-Kitをurlからインストールした後、タブが新規に追加されません。Extentionsタブを確認するとTemporal-Kitがあるのでインストール自体は行われているようです。どうか解決方法をご教授いただけないでしょうか。