Как создать полупрозрачное аудиореактивное наложение с помощью Processing? - PullRequest
0 голосов
/ 04 февраля 2019

Я исследовал этот вопрос повсюду, но не могу найти полезных ответов.По сути, я хочу создать полупрозрачное (или полупрозрачное) аудиореактивное наложение, которое можно транспонировать в общий видеофайл.Идея состоит в том, чтобы сделать видео похожим на пульсацию звуковой дорожки.

Я думаю, что смогу добиться этого эффекта с помощью Обработки и библиотеки minim, но я не знаю, как сформулировать эскиз.Выходной сигнал должен быть 1920x1080, и пульсирующее наложение должно создавать ощущение яркой яркости (например, светлый цвет с яркостью 30-50% и, возможно, непрозрачностью 25-50%).

Я обновляю эту задачу с помощьюэскиз, предоставленный @ george-profenza (с изменениями для использования видео вместо ввода с камеры):

import processing.video.*;

Movie movie;
PGraphics overlay;

import ddf.minim.*;

Minim minim;
AudioInput in;

void setup(){
  size(320,240);

  movie = new Movie(this, "input.mp4");
  movie.play();

  // setup sound
  minim = new Minim(this);
  in = minim.getLineIn();

  // setup overlay
  overlay = createGraphics(width,height);
  // initial draw attributes
  overlay.beginDraw();
  overlay.strokeWeight(3);
  overlay.rectMode(CENTER);
  overlay.noFill();
  overlay.stroke(255,255,255,32);
  overlay.endDraw();
}

void draw(){

  //update overlay based on audio data
  overlay.beginDraw();
  overlay.background(0,0);
  for(int i = 0; i < in.bufferSize() - 1; i++)
  {
    overlay.line( i, 50 + in.left.get(i)*50, i+1, 50 + in.left.get(i+1)*50 );
    overlay.line( i, 150 + in.right.get(i)*50, i+1, 150 + in.right.get(i+1)*50 );
  }
  overlay.endDraw();
  //render video then overlay composite
  image(movie,0,0);
  image(overlay,0,0);
}
// update movie
void movieEvent(Movie m){
  m.read();
}

Предположительно, этот эскиз работает, но, к сожалению, базовая библиотека processing.video (GStreamer 1+), похоже,сбой в Ubuntu (и, похоже, нет способа обновить библиотеку с помощью одного из предоставленных сообществом форков, в соответствии с issue # 90 на GitHub.

Если кто-нибудь может предложитьспособ решить эту проблему или есть другое решение, я был бы признателен.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Это широкий вопрос.Я расскажу о нескольких аспектах:

  1. полупрозрачное (аудио-реактивное) наложение: просмотр PGraphics .Это как слои в обработке.Вы можете рисовать в PGraphics (с прозрачностью и т. Д.), А затем рендерить в том порядке, в котором вы хотите.См. Прокомментированный пример ниже
  2. реагирующий на звук: вы можете использовать минимальное значение - использовать громкость, данные FFT или другое программное обеспечение, которое может выполнять более сложный анализ аудио, из которого вы можете экспортировать данные для обработки вчитай.
  3. 1920x1080 вывод : По моему личному опыту, на момент написания этой статьи я был удивлен, увидев нормальное, но не очень четкое воспроизведение видео 1080p в процессе обработки (я бы испытал ошеломлениевремя от времени тестировался на macbook с 16 ГБ ОЗУ и на ПК также с 16 ГБ ОЗУ).Выполнение анализа звука и оверлейной графики сверху может еще больше снизить производительность, основной проблемой является синхронизация звука и составной графики, то есть вы хотите сделать это в реальном времени.

Если вы просто хотите вывестивидео с прекрасной производительной графикой, чувствительной к звуку, но не обязательно в режиме реального времени, я рекомендую использовать более «автономный» подход:

  • , предварительно анализируя аудиоданные, так что только выесть необходимость управлять визуальными эффектами (может быть так же просто, как громкость)
  • создание прототипов визуальных изображений в низком разрешении с аудио в реальном времени и без видео, чтобы увидеть, хорошо ли выглядит / чувствует себя хорошо
  • рендеринг видео +визуальные эффекты (со свойствами сопоставления звука) кадр за кадром в формате 1080p, а затем рендеринг с синхронизацией звука (может быть с After Effects, ffmpeg и т. д.)

Для справки здесь приведено очень простое доказательствоконцептуальный эскиз, который демонстрирует:

  • с использованием оверлейной графики
  • обновление оверлейной графики, чтобы она была аудиореактивной (Minim MoПример nitorInput)
  • композитинг видео + оверлеи

Обратите внимание на размер видео низкого разрешения.

import processing.video.*;

Capture cam;
PGraphics overlay;

import ddf.minim.*;

Minim minim;
AudioInput in;


void setup(){
  size(320,240);

  // setup video (may be video instead of webcam in your case)
  cam = new Capture(this,width,height);
  cam.start();

  // setup sound
  minim = new Minim(this);
  in = minim.getLineIn();

  // setup overlay
  overlay = createGraphics(width,height);
  // initial draw attributes
  overlay.beginDraw();
  overlay.strokeWeight(3);
  overlay.rectMode(CENTER);
  overlay.noFill();
  overlay.stroke(255,255,255,32);
  overlay.endDraw();
}

void draw(){

  //update overlay based on audio data
  overlay.beginDraw();
  overlay.background(0,0);
  for(int i = 0; i < in.bufferSize() - 1; i++)
  {
    overlay.line( i, 50 + in.left.get(i)*50, i+1, 50 + in.left.get(i+1)*50 );
    overlay.line( i, 150 + in.right.get(i)*50, i+1, 150 + in.right.get(i+1)*50 );
  }
  overlay.endDraw();
  //render video then overlay composite
  image(cam,0,0);
  image(overlay,0,0);
}
// update video (may be movieEvent(Movie m) for you
void captureEvent(Capture c){
  c.read();
}
0 голосов
/ 04 февраля 2019

Прежде чем ознакомиться с записью видеофайла, вам нужно как-то сохранить вывод.Чем убедиться, что вы можете прочитать файл все в порядке.Чем вам понадобится доступ к аудио видеофайлу (?), Если вы не хотите использовать аудио с микрофона.Прозрачное наложение легко, просто нарисуйте с меньшим количеством альфа

...