Создание "анимации" через img2img в Stable Diffusion.
И вновь здравствуйте. Продолжая серию познавательного по нейросетям, сегодня разберём несколько способов, как снятое видео преобразить с помощью нейросетей. Думаю вы видели разные нейронные-клипы и прочее, где криповые ебаки дрыгаются и перетекают из формы в форму. Вот чё то похожее мы будет сегодня делать, но я постараюсь не уходить в крипоту, а сделать, что то вменяемое на сколько кривизна моих рук мне позволит. Ну с предисловием почти закончили.
Вот пример того, что сегодня накуролесим.
И так, что на понадобится? Для начала установленный Stable Diffusion webui от AUTOMATIC1111 (на других работаю редко) и программа EbSynth. Не помешает знание, того, как щёлкать телефоном видео, как переносить их на пк, и как разбить их на последовательность изображений и обратно в другие форматы. Окей вроде всё.
Перво-наперво потребуется снять короткое видео, можно и долгое, хоть кино снимайте, но обрабатывать будем дольше.
Любым удобным способом разбиваем видео на последовательность изображений, типо img_[####].png , я делаю это обычно через After Effects, но можно и онлайн сервисами, просто загуглите "mp4 to png sequence".
И так теперь перед нами два пути, долгий и не столь долгий.
Долгий: Можем обработать все кадры через Stable Diffusion и слепить из них обратно анимацию, но это довольно долгий процесс.
Покороче: Можем воспользоваться программой EbSynth, скормив ей несколько отредаченных ключевых кадров, по которым, она выстроит остальное изображение, основываясь, на движениях с остальных "чистых" кадров. Звучит как магия. Ну оба эти способа имеют как плюсы так и минусы.
Плюсы и минусы полностью через SD:
+ Мало артефактов
+ Анимация чувствуется цельной без разрыва композиции
- Долгое производство
- Флики фона и разных деталей (может кому то зайдёт)
Плюсы и минусы EbSynth:
+ Плавность
+Отсутствие фликов фона и детализации
- Явно видны переходы при смене ключевого кадра (умельцы думаю смогут на монтаже сгладить смешением кадров и т.д...)
- Артефакты при движениях
И так разобрались с плюсами и минусами, и начнём разбирать оба варианта. Начнём с создания с помощью перерисовки всех кадров в SD.
Я специально записал достаточно проблематичный футаж, где я часто и резко дёргаю головой и кривляюсь. Да бы посмотреть, как оба варианта себя покажут в одинаковых условиях.
Видео длится чуть больше 9 секунд, 270 кадров, 30 FPS, 2160x3840. Для этого способа, я намерено удалю половину кадров. Даже не потому, что я задолбаюсь рендерить, но и то, что каждый кадр будет создавать флики деталей, и в 30 FPS их будет в 2 раза больше, чем вы увидите дальше. Не думаю, что было бы приятно, поэтому, так как на вкус и цвет эпилептиков нет, продолжаем.
Разбиваем видео на последовательность изображений.
Заходим в Stable Diffusion и переходим в раздел img2img. загружаем для начала один любой кадр, по нему мы и будем выстраивать всё дальнейшее преобразование.
Для своего примера я выставил модель "sd-v1-5-inpainting", 60 Steps, Euler, разрешение максимально близкое к соотношению сторон кадра, CFG scale 24 denosing strength 0,5. Так же среди скриптов выбрал img2img alterbative test, там убрал все галочки кроме последней "Sigma adj...", В original prompt описываю, то как выглядит ОРИГИНАЛЬНОЕ изображение, остальные значения по умолчанию.
Возвращаюсь наверх, выставляю всё тот же оригинальный промпт и приписываю ему дополнительные детали, и негативные промпты которые мне не нравятся.
Ииии крутим барабан до тех пор пока не увидим изображение, которое зацепит взгляд. Нашли? Отлично сохраняем сид, и прописываем его. Шикарно, а вот теперь реальная закалка для видюхи. Мне пришлось прописывать "--precision full --no-half" в парамтры запуска SD, ибо уменя почему то хреново работает с img2img и часто выдаёт чёрные пикчи. С этими аргументами проблема решилась, но генерация стала дольше.
Переходим в подпункт Batch img2img, и указываем путь, туда где лежит наша последовательность кадров, и путь куда мы выведем всё добро. Убеждаемся, что сид введён, всё готово, и жмём снова старт. Ну у меня на обработку 135 изображений ушло около часа. Поэтому прикидывайте размер изображения и число кадров, что бы не ждать уйму времени, но без этого никуда.
И так, как только всё закончилось, ищем свежие сохранённые кадры, надеюсь они у вас будут поименованы так, же как и файлы для импорта, в формате последовательности. Их можем обратно перековырнуть в форматы видео или гиф, с помощью фотожопа, after effects или онлайн решений (гуглим пальчиками).
Получилось у меня следующее:
Видно, что постоянно дёргается всякое на фоне, но это можно и растушевать или обрезать уже на монтаже кому нужно, сам кадр персонажа держится цельно и не распадается на артефакты, блеск.
А теперь попробуем почти тоже самое, но при помощи EbSynth.
Запускаем прогу и видим, что нас просит вставить путь до Keyframes (ключевых кадров) и Video (последовательность изображений нашего видео).
Важный момент! Разрешение ключевых кадров должно быть идентично размеру видео или наоборот. Если у вас ключевой кадр в 480p а видео в 4K, то словите ошибку.
Нам потребуется задать минимум один обработанный ключевой кадр, по которому оно будет достраивать остальное на основе движения остальных кадров. Я буду вставлять ключевые кадры, каждый раз, когда я буду двигаться и менять выражение лица. Вышло 10 кадров вместо 135 перерисовки.
Ну а для видео я задействую все 270 кадров и не буду их обрезать, пусть будет в нативных 30 фпс.
Дальше для себя я открыл Advanced и тыкнул на Synthesis Detail: High, просто потому что хочу. Вам не обязательно.
Теперь запутаная хрень. Надо задать последовательность встраивания ключевых кадров.
Если простым языком, каждый ключевой кадр будет отвечать за участок в видео от a-кадра b-кадра. Следовательно, так как я разбивал их с идеей, что они будут встраиваться, там где будет происходить динамика, так я и раставляю ключевые кадры. Если у вас видео где минимум движений, максимум движение губ и мимики, то не нужно так запариваться. Если у вас видео, где прыгает попугай, а из него вы рисуете динозавра, то да, надо будет чуть ли не каждый прыг-скок закейфреймить в идеале, а то попугей рассыпется на артефакты.
Выставили все кадры, выставляем теперь каждому вывод, я выведу их в одну папку, но можете в разрые, если намерены смешивать кадры на монтаже (при этом вы заранее в выствлении кадров всё предусмотрели для этого).
Всё жмём RUN ALL и ждём минут 15-20, ну я ждал столько.
Получаем всю такую же последовательность изображений и всё так же известными способами конвертим в удобный для себя формат.
Поздравляю вы великолепны если повторили, всё шаг в шаг и получилось.
Видно, что с этим способом, анимация вышла плавней, без эпилептических вспышек, но сыпется местами на артефакты и видны стыки ключевых кадров но это фиксится монтажом.
Можно ли делать, что то сложнее, чем из мужика-мужика. Можно хоть в киборга или чужого себя перерисовать, но тогда сложнее будет выдержать единый стиль изображения, ибо не уверен, что удастся отрисовать несколько раз идентичные образы выдержанные в одном стиле, но это зависит от того, какие настройки вы выставите, но если оставите, слишком приближающее к оригиналу изображения, то и совсем отличающегося персонажа не выйдет. Ладно вот пример из начала темы.
Как видно, в каждом ключевом кадре облик ощутимо меняется. Тем не менее, кто научится этим пользоваться в полной мере, думаю сможет обратить это себе в пользу.
Спасибо, что дочитали, надеюсь, кому то будет полезно. Задавайте вопросы, постараюсь на них отвечать. Если я где то ошибся, не стесняйтесь поправить меня.
Полезный автор на YT, по видео которого я и решил написать это -https://www.youtube.com/@enigmatic_e
Небольшой русскоязычный гайд, который увидел вчера, пока готовил материалы -
Отличный комментарий!