gpt4 book ai didi

audio - 判断视频中说话的 'amount'

转载 作者:行者123 更新时间:2023-12-03 00:16:29 24 4
gpt4 key购买 nike

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

我对此进行了一些研究,但是对于我正在尝试做的事情来说,一切似乎都有些矫枉过正。这门类(class)的视频,虽然我们想概括一下,但基本上只包含讲师,偶尔会有一些反馈和遥远的学生声音。那么我是否可以简单地查看波形并粗略地使用包含超过某个阈值的音频的点来确定讲师何时说话?还是真的需要 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)');

enter image description here

生成 RMS 信号

尽管您可以在技术上实现重叠的每个样本滑动窗口,但避免重叠更简单,您将获得非常相似的结果。我将信号分成一秒钟的 block ,并将 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)');

enter image description here

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

选择阈值

下一步是确定“响亮”到“足够响亮”的程度。您可以通过直方图了解噪声水平的分布:
histogram(audioRMS, 50);

enter image description here

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

我的 RMS 信号的最小值是 0.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);

由于分析中使用的一秒窗口,听这个会产生超过一分钟的背景人群噪音和部分单词的亚秒剪辑。没有显着长度的语音被剪裁。做相反的事情会产生主要是语音的音频,在跳过部分时会听到咔嗒声。更响亮的掌声也让它通过。

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

关于audio - 判断视频中说话的 'amount',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29224038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com