Главная

Tuesday, 15 August 2023

Hello Barbie.

Всем привет.

Любители 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

В этом случае "Save results as Video" можно и не включать. Ниже результат работы скрипта по приведенному промпту:

Успехов.

3 comments:

  1. Параметр Frames for Wave лучше делать кратным шагам в промпте.

    ReplyDelete
  2. Что неприятно что скрипт в результате не сохраняет EXIF в изображениях. И по тексту только значение denoising.

    ReplyDelete
  3. Для анимации достаточно 15 fps.

    ReplyDelete

А что вы думаете по этому поводу?