首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用相似的部分对齐两个音频

用相似的部分对齐两个音频
EN

Stack Overflow用户
提问于 2020-05-27 16:21:10
回答 2查看 618关注 0票数 1

我有两个音轨,从两个视频中提取出来。

除了一些不同之处外,它们听起来几乎都是一样的。

  • 不同的时间。第一轨道10分钟长,第二轨道10.5分钟长,因为它是拉伸的。
  • 第一个音频只有英语的声音。第二种声音包含英语+外语的声音,你可以听到这两种声音,因为它们混合为画外音.换句话说:音频1有音乐,噪音,英语语音;音频2有音乐,噪音,英语语音,外语语音。
  • 第一和第二轨道可以不同的窗口,或差距。例如,第一轨道可以是场景1,间隙1秒,场景2,间隙1秒,场景3,第二轨道可以是场景1,间隙2秒,场景2,间隙2秒,场景3。

我想知道是否有任何解决办法可以使这两条轨道相一致。

这就是我迄今为止尝试过的:

EN

回答 2

Stack Overflow用户

发布于 2020-05-29 09:37:41

动态时间翘曲 (DTW)是一种规范的算法,用于对可能在长度/速度上有细微差异的数据序列。Python库librosa有一个关于如何使用用于音乐同步的简短教程。

在一些图形音频编辑器中也可能有DTW实现,但我不熟悉任何。

票数 1
EN

Stack Overflow用户

发布于 2020-05-27 18:02:58

我会努力消除每一个场景之间的沉默差距,从两个音频,这样你就只剩下一对干净的音频剪辑清单为每个场景。

然后我会重新创建两个音频信号。伸展的信号在每个场景之间都会有一个恒定的长度间隔。原始(非拉伸)信号在场景之间会有可变的间隙,等于[length of constant gap] + [length of stretched scene - length of normal scene]。这将使每一个场景都在同一时间开始。

如果场景之间的间隙将音频信号降到一个完全零的水平,那么检测和消除这些空白应该是微不足道的。

否则,这可能是有点棘手(通常有一些直流偏移和/或一些背景噪声信号,使它有点难以检测“沉默”从时域波表示)。我以前成功地使用了声能计算,精确地检测音频信号的开始/结束位置。这意味着沿音频滑动傅里叶变换(确保使用带有Hann或Hamming窗口的锥形变换)。一旦获得转换结果,就可以通过执行以下计算来计算能量:

代码语言:javascript
复制
E = Sum(r[x]*r[x] + i[x]*i[x])

其中x从0到傅里叶变换/2-1的长度,r代表每个结果bin的实部,i表示每个结果bin的虚部。

这种计算是在沿着音频滑动傅里叶变换的同时重复执行的,同时记录沿途的能量。通过适当的阈值处理,很可能成功地分离出每个场景的音频部分.

傅里叶变换的长度可以很小(可能在64-256的范围内就足够了,因为你不想要一个很好的频率分辨率,只是对某个时间点上的总能量的估计)。

下面是一个锥形傅里叶变换调用(使用fftw3库)计算频带范围内能量的例子:

代码语言:javascript
复制
double EnergyAnalyzer::GetEnergy(array<double>^ audioFrame, Int32 startIndex) {
   if( startIndex + FrameSize > audioFrame->Length ) {
      throw gcnew ArgumentException("The value of startIndex would overflow the array's boundary", "startIndex");
   }
   // Prepare input to the fourier transform.  The signal is tapered using a Hann window
   for( int i = 0; i < FrameSize; i++ ) {
      _pIn[i] = audioFrame[startIndex + i] * _hann[i];
   }
   fftw_execute(_fftPlan);
   double energy = 0.0;
   for( int i = _binStart; i <= _binStop; i++ ) {
      energy += _pOut[i][0] * _pOut[i][0] + _pOut[i][1] * _pOut[i][1];
   }
   return energy;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62047916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档