Любители Stable Diffusion быстро сообразили что там где возможна генерация картинок там возможна и генерация видео. Точнее сказать, анимации.
В принципе Stable Diffusion для анимации не предназначен, но почему бы не сгенерить последовательность похожих кадров (секвенцию), а после склеить их в видеофайл. Логично предположить что чем больше кадры будут похожи друг на друга тем плавнее получится итоговое видео из них.
Из Stable Diffusion расширений которые предназначены для создания анимации мне знакомы несколько: Deforum, SD-CN-Animation и Loopback wave script. Первый довольно новороченый поэтому про него речь поведу в следующий раз. А вот про два других могу сказать пару слов сегодня.
Скажу сразу что от SD-CN-Animation я отказался. В нем по непонятным для меня причинам все оказалось плохо - он конфликтует с ROOP, он умудряется генерить очень плохие картинки на тех же промптах что и другие скрипты. Поэтому я его исключил из дальнейшего обращения Stable Diffusion. А вот Loopback wave script меня порадовал своей простотой и адекватностью.
Живет он здесь, там же страничка как им пользоваться. Все что касается ffmpeg относится к финальной стадии сборки всех кадров в один видеофайл. Ffmpeg надо будет поставить отдельно. Хотя я вам покажу ниже как его можно использовать самостоятельно и с лучшим качеством.
Итак главное это количество фреймов, чем их больше тем дольше Stable Diffusion в лице А1111 будет трудиться над их созданием. И ...все), шучу - еще надо вписать промпт где первая цифра значит с какого кадра он действует для Stable Diffusion. "Save results as Video" это значит что после генерации А1111 передаст внешнюю команду для ffmpeg на сборку видео с выбраным кодеком.
Вот мой финальный конфиг выглядел так:
Generation Settings
Total Frames: 30
Frames Per Wave: 20
Wave Offset: 0.0
Base Denoising Strength: 0.75
Max Additional Denoise: 0.6
Initial Image Number: 0.0
Video Encoding Settings
Save Video: True
Framerate: 25
Quality: 50
Encoding: VP9 (webm)
Create Segmented Video: False
Prompt Details
Initial Prompt:award winner photo of beautiful (1woman), polka dot hat, makeup in Barbie style, outdoor summer background,ultra realistic,intricate details,8K,HDR,no doll
Negative Prompt:(doll),text,naked,nu, FastNegativeV2
Frame change prompts:
0::award winner photo of beautiful (1woman), polka dot hat, makeup in Barbie style, dress in Margot Robbie`s style, outdoor summer background,ultra realistic,intricate details,8K,HDR,no doll
5::award winner photo of beautiful (1woman), polka dot hat, dress in Margot Robbie`s style, outdoor summer background,ultra realistic,intricate details,8K,HDR
15::award winner photo of beautiful (1woman), polka dot hat, makeup in Barbie style, outdoor summer background,ultra realistic,intricate details,8K,HDR
20::award winner photo of beautiful (1woman), polka dot hat, makeup in Barbie style, dress in Margot Robbie`s style, outdoor summer background,ultra realistic,intricate details,8K,HDR,no doll
На выходе получим видеофайл формата WEBM. Меня качество видео по умолчанию не устраивает даже при завышенных параметрах скрипта, поэтому я собирал видео повторно в командой строке в два прохода.
Для формата WEBM VP9:
ffmpeg -framerate 30 -start_number 0 -i %%d.png -c:v libvpx-vp9 -b:v 6000k -crf 50 -pix_fmt yuva420p -pass 1 -an -f null nul
ffmpeg -framerate 30 -start_number 0 -i %%d.png -c:v libvpx-vp9 -b:v 6000k -crf 50 -pix_fmt yuva420p -pass 2 B22.webm
Или формат MP4 H264:
ffmpeg -framerate 25 -start_number 0 -i %%d.png -c:v libx264 -b:v 10000k -crf 50 -pix_fmt yuva420p -pass 1 -an -f null nul
ffmpeg -framerate 25 -start_number 0 -i %%d.png -c:v libx264 -b:v 10000k -crf 50 -pix_fmt yuva420p -pass 2 B22.mp4
Параметр Frames for Wave лучше делать кратным шагам в промпте.
ReplyDeleteЧто неприятно что скрипт в результате не сохраняет EXIF в изображениях. И по тексту только значение denoising.
ReplyDeleteДля анимации достаточно 15 fps.
ReplyDelete