О чем эта статья
В этой статье я расскажу о программе EbSynth и приведу простой пример её использования. EbSynth - это программа, созданная на основе нейросети. Данная программа позволяет изменять изображения, а точнее стилизовать их.
Под стилизацией здесь понимается замена отдельных элементов изображения, цвета (была синяя рубашка на фото, стала красная) или стилизация изображения целиком.
С учетом того, что любое видео может быть разбито на кадры (картинки, изображения), а потом собрано из кадров - программа может изменять/стилизовать видео. Не на прямую, но всё же. О том как разбивать видео на кадры и собирать его из кадров я уже писал ранее.
Программа достаточно проста в использовании, но требует навыков и опыта для получения качественного результата. В конце статьи будет ссылка на программу и ссылка на файлы с примером.
Зачем это надо
Это творчество и искусство. EbSynth можно использовать по разному и для разных задач. Тут всё будет зависеть от пользователя, его навыков и его целей.
Принцип работы программы
У программы всего одно окно. Вот оно.
Основными полями тут являются:
- Keyframes и Video
- Stop << Keyframe >> Stop
Принцип работы программы приведу на примере. Сразу говорю, что это базовый пример, в котором не рассматриваются дополнительные настройки.
Пусть у пользователя есть видео, которое он хочет изменить. Пользователь разбивает видео на кадры и копирует кадры в папку. Эту папку он указывает в программе, как Video. Логично? Вполне.
Далее пользователь изменяет отдельные кадры. Например открывает их в фотошопе, меняет цвет, что то дорисовывает, что то удаляет - вообщем простор для творчества и экспериментов. Эти кадры он копирует в другую папку, которую указывает в программе как Keyframes . Так называемые ключевые кадры.
После этого пользователь создает пустую папку, которую указывает в программе как Output. Там будет сохранен результат работы программы.
Итого у нас есть исходные кадры - папка Video, пара измененных кадров - папка Keyframes и папка где будет сохранен результат - Output.
Осталось совсем немного - указать программе на основе какого кадра из папки Keyframes следует изменять кадры в папке Video. Проще говоря - смотри на картинку в папке Keyframes и "как то так" изменяй картинку в папке Video. За это отвечают поля Stop << Keyframe >> Stop.
То есть, Начальный кадр в папке Video << Ключевой кадр в папке Keyframes >> Конечный кадр в папке Video.
Например 1<< 1>>10. И далее 1<< 14>>20 и т.д.
Таким образом, мы как бы говорим программе - кадры (картинки) с 1 по 10 в папке Video изменяй смотря на кадр 1 в папке Keyframe. А кадры с 11 по 20 изменяй смотря на кадр 14 в папке Keyframe.
Сколько нужно таких последовательностей, сколько ключевых кадров - зависит от видео. Дело в том, что на кадрах с 1 по 10 может быть, например, синяя рубашка. Мы изменим первый кадр в фотошопе и сделаем рубашку красной. Сохраним результат в папке Keyframe как кадр 1. И укажем это программе.
Программа, наблюдая на кадрах Video синюю рубашку и видя в папке Keyframe кадр с красной, начнет заменять синий цвет на красный. Стилизация в действии! Мы получим в папке Output 10 кадров с красной рубашкой.
Но вот если на кадре 11, рубашка исчезнет - например человек в этой рубашке ушел из кадра, а появились брюки, то программа не поймет что нужно делать и результат будет непредсказуемый. Поэтому как только произошли серьезные изменения - новый объект, сильное изменение позиции объекта (человек в рубашке ушел очень далеко), изменение форму объекта (человек снял и начал гладить рубашку) - нужно изменять этот кадр. Собственно по этому они и называются ключевые.
Пример
Вырежем 5 секунд из мультфильма Мистер Бин. Давайте изменим форму рестлера с красной на синюю.
Разобьем видео на кадры.
Кадры с 1 по 65 нам не интересны. Тут нет рестлера. Ничего менять не нужно.
На кадре 66 (Video\000066.png) появляется рестлер. Вот он то нам и нужен.
Изменим кадр, отредактируем в фотошопе. И сохраним это изображение в папку Keyframes (Keyframes\000066.png). Теперь у нас есть один ключевой кадр.
Смотрим кадры далее. На кадре 90 он начинает падение. То есть происходит какое то значительное изменение положения объекта.
На кадре 103 он уже лежит. Ещё одно изменение.
На кадре 126 он тоже будет лежать, не буду сюда его вставлять.
Загрузим всё в программу. И укажем следующие настройки.
Я указал одну последовательность. То есть говорю программе - начинай изменения с 66 кадра, ориентируйся на ключевой кадр 66 и остановись на 126 кадре.
Да, я видел, что рестлер изменяет положение, падает. Но всё же, я надеюсь что нейросеть поймет это движение. Я не хочу много работать и изменять ещё пару кадров (а иногда это нужно). Посмотрим, что из этого выйдет.
Итак, в папке Output я получил следующие кадры. Кадр 67 - нейросеть поняла что нужно делать и раскрасила форму в синий цвет. И это не удивительно - отличий от кадра 66 почти нет.
Далее, до 78 кадра всё в порядке. И вот кадр 78.
Посмотрите на ботинок справа. Он темно красный. А должен быть синий. Дело в том, что рестлер быстро передвинул ногу - изменил позицию и нейросеть не смогла отследить, связать это изменение с ключевым кадром.
Кадр 79. Ботинок снова синий. Нейросеть смогла понять что ботинок должен быть синий.
Кадр 98. нейросеть понимает, что нужно делать, хотя объект изменил положение и даже форму.
Кадр 126. Форма синяя, ботинок красный.
Интересный результат. То есть, мы решили задачу на 90%. Изменив всего один кадр, мы изменили 126! Но есть нюансы - ботинок.
Нейросеть то меняет его цвет, то нет. А вот цвет формы всегда синий, хотя рестлер летит на пол, изменяя и позицию и форму. Скажу прямо - с чем это связано сложно понять, нейросеть так обучена. Но как я и сказал - важна форма и позиция объекта. Возможно, размер, положение, цвет сыграл роль - хотя и тут тоже всё индивидуально.
Решается эта проблема - добавлением нового ключевого кадра. То есть нужно просто изменить кадр 78, раскрасив ботинок в синий цвет. И далее наблюдать, где нейросеть снова ошибется. Можно и изменить другие настройки (Weight, Mapping..), описание функций которых выходит за рамки данной статьи.
Да, исправлять ошибки нейросети не очень приятно. Но EbSynth пока в альфа версии и я считаю что это достойный результат. В этой статье я показал базовый и простой пример использования EbSynth. Нейросеть очень интересная и спектр её применения достаточно велик от простого изменения видео, до анимации старинных картин.