我正在尝试构建一个 C# 应用程序来检测视频中何时出现音乐。我可以找到所需的任何格式的音频。然而,我在音乐检测方面遇到了障碍。
有大量关于音频指纹识别以及如何使用 C#/任何语言进行识别的帖子。但是,我希望电影中出现音乐的粗略进出时间,我不关心音乐是什么。
音乐不太可能存在于任何指纹数据库中。所以很可能是一个完全计算的分析。
有什么巧妙的想法吗?还是我最好实现一个节拍检测算法并逐个处理它。然后估计入/出点?
我正在尝试构建一个 C# 应用程序来检测视频中何时出现音乐。我可以找到所需的任何格式的音频。然而,我在音乐检测方面遇到了障碍。
有大量关于音频指纹识别以及如何使用 C#/任何语言进行识别的帖子。但是,我希望电影中出现音乐的粗略进出时间,我不关心音乐是什么。
音乐不太可能存在于任何指纹数据库中。所以很可能是一个完全计算的分析。
有什么巧妙的想法吗?还是我最好实现一个节拍检测算法并逐个处理它。然后估计入/出点?
我能想到的只有两件事可以清楚地将“音乐”与所有其他音频/声音区分开来:
Meter:几乎所有组成的音乐都有一个仪表。从理论上讲,这应该可以通过 FFT 检测到,但使用的频率范围约为。0.25hz 到 10hz(而不是通常的 20hz-20Khz)。在实践中?我不知道,但似乎值得一试。
调音:几乎所有专业音乐的共同点,包括专业歌手的声音(当他们有音乐伴奏时),但对于任何其他声音不一样的是,它们都将采用 12 音等律音阶的相同“调音”。换句话说,它们的频率总是被 2^(1/12) 的精确倍数分开。一旦建立了调优,它们将永远不会处于这些步骤之间的间隙中。包括人声在内的正常声音分布在整个频谱中,但音乐几乎总是在音阶音符的 +/- 10 分以内。
方法#1 是不确定的,我不知道是否有人曾经尝试过。
但是#2 是确定的,您实际上可以使用音频频谱分析仪看到这一点,但 FFT 必须具有非常高的辨别力(每个八度音程至少 36 个分区)。但也有一些问题,例如:
嗯,这些是我的“聪明”想法。现在这只是一个小问题...... ;-)
OP的问题可以总结如下:
在视频的广义音频流中,尝试检测“音乐”与“其他一切”。
指纹数据库中不太可能存在“音乐”的地方。
在这种情况下,“其他一切”必须包括:
我们还必须假设通用视频的音频音轨经过回声、混响、多声道平移等高度处理。
在一般的视频案例中,上述所有音频元素都会混合在一起成为最终的音频,这使得问题领域绝对是巨大的。
这是一个非常具有挑战性的问题,很可能没有简单或稳健的解决方案。
为了支持这个前提,一个通用的音乐分类器(我们称之为 MuCLAS),其中未知的音乐样本是分类器训练集的成员,是一个非常困难的问题,因为创建训练集涉及大量费用,并且在调整和创建分类器索引时。
但是 OP 的问题域比 MuCLAS 问题域大得多,因为 OP 的未知数据集的熵要高得多。相对于 MuCLAS,这意味着更高的复杂性和成本。
上述前提的另一个支持论据是,一般语音识别的现有技术水平假设并坚持未知数据集中的熵比 OP 数据集的隐含熵低得多。
语音识别是自主模式识别领域中资金最充足的问题之一。
您可以使用“Microsoft Expression Encoder”处理视频和音频