当前位置: 首页 > 知识库问答 >
问题:

如何通过处理创建半透明的音频反应覆盖?

岑畅
2023-03-14

我对这个问题进行了广泛的研究,但我找不到任何有用的答案。基本上,我想创建一个半透明(或半透明)的音频反应覆盖层,可以转换到一个通用的视频文件。这个想法是让视频看起来像是随着音轨脉动。

我想我可以通过处理和minim库实现这种效果,但是我不知道如何制定草图。输出应该是1920x1080,脉动叠加应该产生一种充满活力的亮度感(例如,具有30-50%亮度和25-50%不透明度的浅色)。

我正在用@george profenza提供的草图更新这个挑战(修改为使用视频而不是cam输入):

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();
}

大概这个草图是可行的,但不幸的是,底层的处理。视频(GStreamer 1)Ubuntu上的库似乎出现了故障(据GitHub上的第90期报道,似乎没有办法用社区提供的叉子更新库。

如果有人能提出解决这个问题的方法或另一种解决方案,我将不胜感激。

共有2个答案

淳于健
2023-03-14

首先熟悉编写视频文件,你需要以某种方式保存输出。确保你能正确阅读文件。比你需要访问视频文件的音频(?)除非你想使用麦克风的音频。透明的覆盖很容易,只需要用更少的α来油漆

苏俊友
2023-03-14

这是一个广泛的问题。我将介绍几个方面:

  1. 半透明(音频反应)覆盖:查看PGraphics。这就像处理中的层。您可以绘制成图形(半透明等)。),然后按照您想要的顺序渲染。参见下面的注释示例
  2. 音频反应:您可以使用minim是使用响度,FFT数据或其他一些软件,可以做更高级的音频分析,您可以从其中导出数据处理读取。
  3. 1920x1080输出:根据我个人的经验,在写这篇文章的时候,我惊讶地看到了可以,但不是超清晰的1080p视频播放处理(我偶尔会经历惊人的,在16GB的macbook上测试RAM和PC上也有16GB RAM)。在顶部进行声音分析和覆盖图形可能会进一步降低性能,主要问题是音频和合成图形之间的同步,即您想要实时执行此操作。

如果你只是想输出一个具有漂亮的生成音频响应图形的视频,但不需要实时,我建议采取更“离线”的方法:

  • 预先分析音频数据,以便只需要驱动视觉效果(可以像响度一样简单)
  • 用实时音频和无视频的低分辨率原型视觉效果,看看看起来/感觉是否良好
  • 以1080p逐帧渲染视频视觉效果(具有声音映射属性),然后用音频同步渲染(可以使用后效果,ffmpeg等)

以下是一个非常基本的概念验证草图,以供参考:

  • 使用覆盖图形
  • 更新覆盖图形为音频响应(Minim监视器输入示例)
  • 合成视频覆盖

请注意低分辨率视频大小。

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();
}
 类似资料:
  • 我在谷歌上搜索了很多,甚至浏览了很多这个网站的问题,但我就是找不到解决我问题的方法。 我想创建一个像下面这样的进度对话框。但我不明白如何做到这一点。我已经尝试创建一个自定义的进度对话框,但。使用它,你只能修改内部旋转器的外观。在我的情况下,我想修改它的布局。我如何实现...???? 到目前为止,我已经尝试了以下方法...

  • 本文向大家介绍在Java Swing中创建半透明窗口,包括了在Java Swing中创建半透明窗口的使用技巧和注意事项,需要的朋友参考一下 使用JDK 7,我们可以非常容易地使用swing创建半透明的窗口。使用以下代码,可以使JFrame半透明。 示例 参见下面具有55%半透明性的窗口的示例。 输出结果

  • 在iOS 7上,将UISearchBar设置为半透明并不会使搜索栏半透明。有什么我不明白的吗?我正在将它添加到UIViewController,它是UINavigationController的一部分。有一个与顶部布局指南对齐的UITableView。导航栏很好,半透明,但由于某些原因,搜索栏是纯色的。

  • 问题内容: 在 Java中 ,是否可以覆盖使用创建的类中的方法?例如,说我有以下课程: 在一个类中,我想直接创建它并重写其方法,如下所示: 有没有办法以同样的方式使用反射来覆盖方法?也许是这样的吗?: 如果没有,是否还有其他方法可以这样做,或者可以使用外部库吗?我正在寻找将侦听器添加到setter方法以更改绑定值的方法。 问题答案: 不,用您的例子是不可能的。 在您的示例中,Java编译器将创建两

  • 我想要这样的东西: 我不知道如何实现…任何帮助!

  • 本文向大家介绍在Java Swing中创建渐变半透明窗口,包括了在Java Swing中创建渐变半透明窗口的使用技巧和注意事项,需要的朋友参考一下 使用JDK 7,我们可以非常容易地使用swing创建基于渐变的半透明窗口。以下是制作基于渐变的半透明窗口所需的步骤。  首先使JFrame的背景透明。  创建渐变颜料,然后填充面板。  将面板分配为框架的内容窗格。 示例 请参阅下面带有基于梯度的半透明