我想要能够以程序方式比较mp3文件。但问题是我不知道用什么方式比较,是用头部信息?直方图?声道信息?有没有人在这个领域有经验?
ffmpeg -y -i $mp3 $mp3.wav;
md5sum $mp3.wav
avconv -i wav.wav -map 0 -map_metadata 0:s:0 -c copy nometa.wav
- Tamas你可以比较mp3标签中保存的数据。标签以ID3格式保存。有很多库可以帮助你访问标签,tagLib是一个流行的选择(对于.net应用程序,TagLib Sharp也是如此)。
这是目前最可靠的方法,允许您找到匹配项,而不管压缩甚至格式如何。从文件的实际音频创建唯一的指纹,允许识别歌曲,echoprint是一个开源的例子。
这是一种更快的方法,允许您查找内容完全匹配的文件。
更多阅读:
什么是比较?元数据(作者、标题等)、音频数据?目的是什么?
比较音频数据的一种流行且基本的方式是在某些频谱特征上计算某种距离,例如MFCC:
http://en.wikipedia.org/wiki/Mel_frequency_cepstral_coefficient
我编写了一个PHP程序,只是比较音频--忽略所有的头文件、图形和其他信息。
基本上从文件列表foreach as $src:
/usr/bin/ffmpeg -hide_banner -y -i "$src" -f s16le -acodec pcm_s16le output.raw 2> /dev/null
您可以对output.raw文件进行md5哈希(必须记录该文件),并将其与其他原始文件进行比较。
转换后的文件是原始输出音频,仅用于创建哈希。我预见到脚本的唯一问题是在转换/哈希后保留低质量的文件,或者保留较少的ID3标签的文件...尽管我移动文件而不是删除它们,所以仍然有旧文件。
我经常在Linux上使用fdupes来查找重复文件。fdupes使用md5校验和。