🎥
Stable Diffusionで動画を変換する.batを制作
前提
Stable Diffusionの構築はこちらなどをご覧ください
Stable Diffusionをローカルで使おう!〜構築から使い方まで〜
内容
Stable Diffusion で下の動画のような映像を制作しました。AIらしい独自の質感が出ています。
- 元となる動画を連番pngで出力
- .batを書いてStable Diffusionのimg2img.pyに画像を渡す
- その連番画像を映像に戻す
という単純なプロセスで映像制作をしております。
元動画を連番pngで出力
Adobe Media Encoderで出力をしました。 Adobeに契約していない人でも、AviUtlをはじめとした様々なソフトで連番画像を書き出すことが可能です。また、元動画に関して規約などをしっかりとご確認ください。
元動画
.batを書いてStable Diffusionのimg2img.pyに画像を渡す
batchファイルの同ディレクトリ内のファイルに対して操作をする機能を使って、連続で画像にStable Diffusionによる加工を行うことができます。
D:\anaconda\Scripts\activate.bat と D:\stable-diffusion\optimizedSD\optimized_img2img.py については、自分のPC内の該当ファイルのパスを指定しなければいけません。
また、プロンプトについて希望のものがあれば --promptで指定をすることが可能です。
@echo off
for %%i in (*.png) do (
call D:\anaconda\Scripts\activate.bat ldm
python "D:\stable-diffusion\optimizedSD\optimized_img2img.py" --init-img %%i --n_samples 1 --H 540 --W 960 --outdir "D:\sou\results\outputs\img2img-samples"
)
pause
バッチファイル内のオプションの意味は以下の通りです。
--init-img 元画像のパス
--n_samples 出力する画像枚数 a.k.a. バッチサイズ
--H 出力画像の縦の長さ(px)
--W 出力画像の横の長さ(px)
--outdir 出力するディレクトリ
さらに
img2img.pyには、--strengthという元画像をどの程度残すのかというオプションが存在します。
それを変更しながら以下のような動画を制作しました。
こちらのbatchファイルも掲載しておきます。詳細には触れませんが、--strengthを往復で0-1で29ステップで変化させています。(もっと良い書き方をしたかった)
@echo off
set count=0
set trigger = 0
set up = 0
set under = 0
setlocal enabledelayedexpansion
for %%i in (*.png) do (
call D:\anaconda\Scripts\activate.bat ldm
if !trigger! equ 0 (
(set /a count=!count!+1)
if !count! gtr 28 (set trigger=1)
) else (
(set /a count=!count!-1)
if !count! lss 1 (set trigger=0)
)
set /a temp = !count!/30
set /a up=!count!/30
set /a under=!count!*100/30
if !under! lss 10 (
python "D:\stable-diffusion\optimizedSD\optimized_img2img.py" --init-img %%i --n_samples 1 --H 540 --W 960 --outdir "D:\sou\results\outputs\img2img-samples" --strength !up!.0!under! --prompt "dancer, monochrome, modern"
echo !up!.0!under!
) else (
python "D:\stable-diffusion\optimizedSD\optimized_img2img.py" --init-img %%i --n_samples 1 --H 540 --W 960 --outdir "D:\sou\results\outputs\img2img-samples" --strength !up!.!under! --prompt "dancer, monochrome, modern"
echo !up!.!under!
)
)
endlocal
pause
最後に
なにか誤りやより良い書き方などありましたら、ご教示いただければ幸いです。
Discussion