Audio 确定';金额';在视频中讲话

Audio 确定';金额';在视频中讲话,audio,signal-processing,Audio,Signal Processing,我正在做一个项目来转录演讲视频。我们目前只使用人类进行转录,因为我们认为转录比编辑ASR更容易,特别是对于技术主题(这不是我问题的重点,尽管我希望得到任何有关这方面的信息)。根据我们的经验,我们发现在大约10分钟的转录后,我们会感到焦虑或失去注意力。因此,我们根据讲座内容中的逻辑中断将视频分成约5-7分钟的片段。然而,我们发现,一堂课的开始(至少对于我们正在试讲的课程而言)往往比之后有更多的讨论,而之后往往有时间让学生们相互讨论一个问题。我在想,我们可以通过信号处理来确定整个视频中的大致讲话量。

我正在做一个项目来转录演讲视频。我们目前只使用人类进行转录,因为我们认为转录比编辑ASR更容易,特别是对于技术主题(这不是我问题的重点,尽管我希望得到任何有关这方面的信息)。根据我们的经验,我们发现在大约10分钟的转录后,我们会感到焦虑或失去注意力。因此,我们根据讲座内容中的逻辑中断将视频分成约5-7分钟的片段。然而,我们发现,一堂课的开始(至少对于我们正在试讲的课程而言)往往比之后有更多的讨论,而之后往往有时间让学生们相互讨论一个问题。我在想,我们可以通过信号处理来确定整个视频中的大致讲话量。其想法是将视频分成包含大致相同数量演讲的片段,而不是长度相同的片段

我对此做了一些研究,但对于我正在尝试做的事情来说,一切似乎都有点过头了。本课程的视频,虽然我们想概括一下,但基本上只包含讲师偶尔的反馈和遥远的学生声音。那么,我可以简单地看一下波形,粗略地使用包含超过某个阈值的音频的点来确定演讲者何时发言吗?或者ML方法真的有必要量化讲师的演讲吗

希望这是有意义的,如果有必要,我可以澄清任何事情


感谢您的帮助,因为我没有信号处理方面的经验。

尽管有一些机器学习方法能够很好地将声音与其他声音区分开来,但您的应用程序似乎并不需要这种准确性。一个简单的基于级别的方法,类似于你提出的方法,应该足以让你估计出发言时间

基于电平的声音检测 目标 给定一个音频样本,将含有大量声音的部分与包含背景噪声的部分区分开来。这样就可以很容易地用来估计声音文件中的语音量

方法概述 我们将首先将其转换为滑动窗口RMS,而不是查看信号中的原始电平。这提供了一个简单的方法来测量音频样本中任意给定点的音频能量。通过分析RMS信号,我们可以自动确定区分背景噪声和语音的阈值

工作实例 我将在MATLAB中使用这个例子,因为它使数学变得容易,并且让我可以创建插图

源音频

我用的是肯尼迪总统的“我们选择登月”演讲。我正在使用维基百科的音频文件,只是提取左声道

imported = importdata('moon.ogg');
audio = imported.data(:,1);
plot(audio);
plot((1:length(audio))/imported.fs, audio);
title('Raw Audio Signal');
xlabel('Time (s)');

生成RMS信号

虽然您可以在技术上实现每个示例的重叠滑动窗口,但是避免重叠更简单,并且您将获得非常相似的结果。我将信号分成一秒钟的块,并将RMS值存储在一个新数组中,每秒钟有一个音频条目

audioRMS = [];
for i = 1:imported.fs:(length(audio)-imported.fs)
   audioRMS = [audioRMS; rms(audio(i:(i+imported.fs)))];
end
plot(1:length(audioRMS), audioRMS);
title('Audio RMS Signal');
xlabel('Time (s)');

这将产生一个更小的数组,其中充满了表示音频能量或每秒“响度”的正值

选择阈值

下一步是确定“足够响亮”的程度。您可以通过直方图了解噪声级的分布:

histogram(audioRMS, 50);

我怀疑较低的架子是人群和录音环境的一般背景噪音。下一个货架可能是更安静的掌声。剩下的就是演讲和喧闹的人群反应,这与这种方法是无法区分的。对于您的应用程序,最响亮的区域几乎总是语音

我的RMS信号中的最小值是.0233,作为粗略的猜测,我将使用该值的3倍作为噪声标准。这似乎会切断整个较低的货架和下一个货架的大部分

对该阈值进行简单检查,可得出972秒的语音计数:

>> sum(audioRMS > 3*min(audioRMS))

ans =

   972
为了测试它的实际工作情况,我们可以收听被消除的音频

for i = 1:length(speech)
   if(~speech(i))
      clippedAudio = [clippedAudio; audio(((i-1)*imported.fs+1):i*imported.fs)];
   end
end
>> sound(clippedAudio, imported.fs);
由于在分析中使用了1秒的窗口,听这段视频会产生一分钟多的背景人群噪音和单词部分的亚秒片段。没有明显的讲话长度被删减。做相反的操作会产生主要是演讲的音频,在跳过部分时会听到咔哒声。更响亮的掌声也让它通过了


这意味着对于这次演讲,最小RMS的三倍的阈值非常有效。您可能需要调整该比率,以便为您的录制环境获得良好的自动结果,但这似乎是一个很好的起点。

因为您只是在寻找一个粗略的估计,所以基于阈值的方法似乎很好。但是,不要看原始波形,而是考虑RMS在几秒钟的滑动窗口上。查看滑动窗口RMS与测量的最安静RMS(背景噪声地板)的比率将有助于调整视频中录制环境之间的差异。你会得到相当数量的误报和漏报,但很可能它会工作得很好。谢谢!!从其他人那里得到了关于使用滑动窗口的类似建议,但我没有想到使用RMS。非常感谢!!回答得很好。大致上是我所设想的,但我在这方面缺乏经验,因此很难找到与ML方法相反的“简单”方法。