gpt4 book ai didi

python - 使用 linux 或 python 查找 mp3 声音样本的时间戳

转载 作者:行者123 更新时间:2023-12-02 22:13:11 25 4
gpt4 key购买 nike

我正在慢慢研究一个项目,如果计算机可以在 mp3 文件中找到某个样本出现的位置,这将非常有用。我会将这个问题限制为意味着相当精确的音频片段,而不仅仅是例如同一乐队在不同录音中的歌曲中的合唱,这将成为某种机器学习问题。我在想,如果它没有添加噪音并且来自同一个文件,那么它应该可以在没有机器学习的情况下以某种方式定位它发生的时间,就像 grep 可以在文本文件中找到单词出现的行一样。
如果您周围没有 mp3,可以使用公共(public)领域的网络上的一些音乐来解决问题,因此没有人提示:

curl https://web.archive.org/web/20041019004300/http://www.navyband.navy.mil/anthems/ANTHEMS/United%20Kingdom.mp3 --output godsavethequeen.mp3
一分钟:
exiftool godsavethequeen.mp3 | grep Duration
Duration : 0:01:03 (approx)
现在在 30 到 33 秒之间剪掉一点(la la la la ..):
ffmpeg -ss 30 -to 33 -i godsavethequeen.mp3 gstq_sample.mp3
文件夹中的两个文件:
$ ls -la
-rw-r--r-- 1 cardamom cardamom 48736 Jun 23 00:08 gstq_sample.mp3
-rw-r--r-- 1 cardamom cardamom 1007055 Jun 22 23:57 godsavethequeen.mp3
出于某种原因,exiftool 似乎高估了样本的持续时间:
$ exiftool gstq_sample.mp3 | grep Duration
Duration : 6.09 s (approx)
..但我想这只是它告诉你的近似值。
这就是我所追求的:
$ findsoundsample gstq_sample.mp3 godsavethequeen.mp3
start 30 end 33
如果它是 bash 脚本或 python 解决方案,即使使用某种 python 库,我也会很高兴。有时,如果您使用了错误的工具,解决方案可能会奏效,但看起来很糟糕,因此选择更合适的工具。这是一分钟的 mp3,还没有考虑过性能,只是为了完成它,但想要一些可扩展性,例如在半小时内找到十秒。
当我尝试自己解决这个问题时,一直在查看以下资源:
How to recognize a music sample using Python and Gracenote?
https://github.com/craigfrancis/audio-detect
https://madmom.readthedocs.io/en/latest/introduction.html
Reading *.wav files in Python
https://github.com/aubio/aubio
aubionset 是一个很好的候选人
https://willdrevo.com/fingerprinting-and-audio-recognition-with-python/

最佳答案

MP3 是一种有趣的格式。基础数据存储在“帧”中,每帧长 0.026 秒。每帧都是声波的快速傅立叶变换,根据大小和比特率等以不同程度的质量编码。在您的情况下,您确定 mp3 具有匹配的比特率吗?如果是这样,则应该可以使用相对简单的 grep 样式方法,前提是您在 Frame 边界上进行选择。但是,完全有可能并且可能并非如此。
对于真正的解决方案,您需要在一定程度上处理 mp3 文件,以抽象出编码。但是,即使对于匹配的声音,也不能保证生成的波匹配,因为比特率和可能的帧对齐可能不同。这种很小的机会使它变得更加困难。
我会给你我解决这个问题的方法,但值得注意的是,这不是做事的完美方式,只是我最好的挥杆。即使它是同一个文件,也不能保证帧边界是对齐的,所以我认为你需要采取一种非常面向波的方法,而不是面向数据的方法。
首先,将 mp3 转换为 wave。我知道将其压缩会很好,但我再次认为面向波是我们唯一的希望。然后,使用高通滤波器来尝试去除任何样本之间不同的音频压缩伪影。一旦你有两个波形,在波形中找到小波应该是相对简单的。您可以遍历可能的起始位置并减去波浪。当你接近零时,你知道你已经接近了。

关于python - 使用 linux 或 python 查找 mp3 声音样本的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62524604/

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