В настоящий момент (обязательная оговорка, когда речь идеть про нейросети) для генерации одного изображения у AI уходит минимум секунда. В лучшем случае пол секунды. Для видео нам требуется как минимум 15 кадров в секунду (а лучше бы и все тридцать). Следовательно, создавать нейросетью видео в реальном времени и таким образом визуализировать музыку - невозможно.

Теперь, когда мы это поняли, давайте подумаем, как же это сделать.

Кстати, эту статью я начал писать в ожидании начала концерта, на котором видеоинсталяция менялась от звуков музыки. Вот, как все прошло.

Проще всего понять способ генерации такого контента можно если представить двумерное сечение четырехмерного куба. Так думал я начать это описание, но потом решил, что это как-то слишком. Поэтому давайте так:

Чтобы визуализировать музыку ее нужно представить в виде некоторых параметров. Например, амплитуду волны на определенных частотах. Параметры могут быть самые разные и их может быть произвольное количество. Параметры меняются со временем, и каждому моменту времени должно соответствовать свое изображение. Зависимость генерируемого нейросетью изображения от параметра получить просто. Фактически мы задаем множество таких параметров при генерации. И есть такие параметры, при маленьком изменении которых картинка меняется тоже незначительно. На этом основаны многие скрипты для SD. Например, плагин shifting attention плавно меняет изображение при изменении веса того или иного токена в промпте. И именно такие параметры нам и нужны. Но, как мы помним, основная сложность заключается в том, что генерация этих кадров занимает гораздо больше времени, чем мы можем себе позволить. Выход из ситуации очевиден. Нужно сгенерировать возможные кадры заранее. Для каждого из возможных значений параметров. Например, Возьмем рисунок цветка. Один параметр будет заведовать его высотой, а другой - внешним видом. Например тем, насколько он похож на кляксу.

Изменение первого параметра
Изменение первого параметра
Изменение второго параметра
Изменение второго параметра

Так мы получаем набор изображений рассортированных по двум осям. Такой прямоугольник, каждая точка которого - это картинка. Картинки двумерные, поэтому в целом получается четырехмерный куб - тессеракт. Такой тессеракт и есть наша визуализация, потенциально содержащая все возможные варианты параметров. Во время звучания музыки, два параметра меняются, и эти два параметра в каждый момент времени задают конкретную картинку. Так музыка выделяет из тессеракта последовательность кадров, которая и выдает визуализацию. В реальном времени, заметим.

На этом видео можно увидеть, как меняются параметры, и как в итоге меняется изображение. В качестве параметров тут выбрана амплитуда на низких частотах и амплитуда на высоких.

Можно заметить, что реализовал я все это с помощью TouchDesigner.

Конечно же, все это надо подстраивать под конкретные инструмменты.

Итак, для создания визуализации создается тессеракт, содержащий картинки для всех возможных значений параметров, которые мы берем из музыки. Параметров может быть сколько угодно, но надо понимать, что 2 параметра на 100 величин - это 10 000 картинок. А 3 - уже сразу 1 000 000. У меня на генерацию тессеракта 100x100 уходило полторы суток.

Тессеракты могут быть самые разные по содержанию

Создание их - настоящий полноценный творческий процесс. Сейчас, как и любому нейросетевому видео, такой графике не хватает плавности. Очень сложно добиться максимальной близости двух соседних кадров с близкими параметрами генерации. Так что сейчас я работаю именно над этим.

Комментарии (9)


  1. SensDj
    16.05.2023 21:33
    +3

    имхо: видео мельтешит раз в 10 быстрее чем музыкальный узор складывается, и повторяющиеся образы (изображения) быстро надоедают мозгу, хочется каждый раз новые видеть (примерно через каждые 3 секунды), без повторов


    1. Snark-s Автор
      16.05.2023 21:33

      Да, есть такое. Вот думаю, что с этим делать. Можно, например, менять тессеракты каждые 5 секунд.


  1. Altaev
    16.05.2023 21:33
    +2

    Не умаляя труда автора, мне вспоминается милкдроп (кажется) для винампа, который примерно то же (как визуальный результат) мог много-много лет назад. Нет, с авс не путаю))


    1. Snark-s Автор
      16.05.2023 21:33

      Сделать просто визуализацию музыки, в том же тачдизайнере, несложно. Интереснее придумать, как это сделать с помощью нейросетей


  1. berng
    16.05.2023 21:33
    -3

    Уже в первом абзаце ошибка. Такое ощущение, что вы в современные игрушки не играли, а там скорость генерации изображений будет повыше, чем 15fps. Вы видимо на какую-то конкретную нейросеть ориентировались и предполагаете, что она каждый кадр с нуля рисовать будет, а сейчас так уже не делают - долго, как вы уже заметили: намного проще и быстрее на каждом фрейме дообучать предыдущее изображение.


  1. gidrotr0nik
    16.05.2023 21:33
    +1

    Спасибо автору за работу! В верном направлении движитесь!


  1. Victor_Panic
    16.05.2023 21:33

    Вы только что изобрели vj-инг :) но все равно ResPect!

    Лет 13-15 назад я хотел первым в своём регионе заняться vj-ингом на коммерческой основе . Забегая вперёд - идея провалилась, но сейчас не об этом.

    Вручную рулить видеорядом со сложной обработкой налёту возможно уже давно. Resolume существует если не 20, то 15 лет точно. А до неё были другие программы, уже не вспомню названия, без красивого графического интерфейса вообще - все на флоуграфах и скриптах, но Казантип в те времена ею оформлялся.

    Так вот в то же время мне попалась в руки программа которая надеру генерала свой визуальный контент на основное подаваемого на аудиовыход сигнала и локальной папки с футажами и статических изображений. Органов управления почти не было, но результат впечатлял. Всё было красиво и в тему! Понятия нейросеть тогда ещё не было даже в задумках )) зато был сложный алгоритм частотного анализа, ну или что там ещё.... Название программы пытаюсь вспомнить...


    1. Snark-s Автор
      16.05.2023 21:33

      Resolum? )


      1. Victor_Panic
        16.05.2023 21:33

        что Resolume?