【问题标题】:Detect duplicate MP3 files with different bitrates and/or different ID3 tags?检测具有不同比特率和/或不同 ID3 标签的重复 MP3 文件?
【发布时间】:2010-10-03 08:06:06
【问题描述】:

我如何检测(最好使用 Python)可以使用不同比特率(但它们是同一首歌曲)编码的重复 MP3 文件和可能不正确的 ID3 标签?

我知道我可以对文件内容进行MD5 校验和,但这不适用于不同的比特率。而且我不知道 ID3 标签是否对生成 MD5 校验和有影响。我应该重新编码具有不同比特率的 MP3 文件,然后我可以进行校验和吗?你有什么推荐的?

【问题讨论】:

标签: python file mp3 duplicates id3


【解决方案1】:

老AudioScrobbler 和现在MusicBrainz 的人们很久以前就一直在研究同样的问题。目前,可以帮助您完成任务的 Python 项目是 Picard,它将使用 GUID(实际上是其中的几个)标记音频文件(不仅是 MPEG 1 第 3 层文件),从那时起,匹配标签非常简单。

如果您更愿意将其作为自己的项目,libofa 可能会有所帮助。

【讨论】:

  • 另外 Picard 是开源的,MusicBrainz 可以由您自己的代码使用。
  • 有意思,Picard 是如何生成这个 GUID 的?
  • @nemo:首先,了解 MusicBrainz 是什么:musicbrainz.org/doc/AboutMusicBrainz。然后阅读它如何将音乐内容与musicbrainz.org/doc/HowPUIDsWork中的数据库记录匹配
  • @James:如果您还没有找到您在之前评论中提出的问题的答案,请在此处查看我之前的评论。
【解决方案2】:

就像其他人所说,简单的校验和不会检测到具有不同比特率或 ID3 标签的重复项。您需要的是音频指纹算法。 Python Audioprocessing Suite 有这样一个算法,但我不能说它有多可靠。

http://rudd-o.com/new-projects/python-audioprocessing

【讨论】:

    【解决方案3】:

    对于标签问题,Picard 可能确实是一个很好的选择。如果在识别出两个可能重复的文件后,您想要从中提取比特率信息,请查看mp3guessenc

    【讨论】:

      【解决方案4】:

      我认为简单的校验和不会起作用:

      1. ID3标签会影响md5
      2. 不同的编码器会以不同的方式对同一首歌曲进行编码 - 因此校验和会有所不同
      3. 不同的比特率会产生不同的校验和
      4. 将 mp3 重新编码为不同的比特率可能听起来很糟糕,而且肯定会与一步压缩的原始音频不同。

      我认为你必须比较 ID3 标签、歌曲长度和文件名。

      【讨论】:

        【解决方案5】:

        以相同的比特率重新编码是行不通的,事实上它可能会使事情变得更糟,因为转码(这就是所谓的以不同比特率重新编码的方式)会改变压缩的性质,你是重新压缩一个已经压缩的文件会导致一个明显不同的文件。

        这有点不符合我的要求,但我会通过查看 MP3 的波形来解决这个问题。通过将 MP3 转换为未压缩的 .wav 或仅对 MP3 文件本身运行分析。为此应该有一个图书馆。只是一个警告,这是一项昂贵的操作。

        另一个想法,使用 ReplayGain 扫描文件。如果它们是同一首歌曲,则应将它们标记为相同的增益。这仅适用于来自完全相同专辑的完全相同的歌曲。我知道有几个案例是重新发行以更高的音量重新制作,从而改变了重播增益。

        编辑:
        您可能想查看http://www.speech.kth.se/snack/,它显然可以进行频谱图可视化。我想任何可以视觉频谱图的库都可以帮助您比较它们。

        来自官方 python 页面的 link 也可能会有所帮助。

        【讨论】:

          【解决方案6】:

          Dejavu 项目是用 Python 编写的,完全符合您的要求。

          https://github.com/worldveil/dejavu

          它还支持许多常见格式(.wav、.mp3 等)以及在原始音轨中查找剪辑的时间偏移。

          【讨论】:

            【解决方案7】:

            我正在寻找类似的东西,我发现了这个:
            http://www.lastfm.es/user/nova77LF/journal/2007/10/12/4kaf_fingerprint_(command_line)_client

            希望对你有帮助。

            【讨论】:

              【解决方案8】:

              我会使用长度作为我的主要启发式方法。这就是 iTunes 在尝试使用 Gracenote database 识别 CD 时所做的事情。 Measure the lengths in milliseconds 而不是秒。请记住,这只是一种启发式方法:您绝对应该在删除之前听取任何检测到的重复项。

              【讨论】:

                【解决方案9】:

                您可以使用 PUID 和 MusicBrainz 的后继者,称为 AcoustiD

                AcoustID 是一个开源项目,旨在创建一个免费的音频指纹数据库,并映射到 MusicBrainz 元数据数据库,并使用该数据库提供用于音频文件识别的网络服务...

                ...指纹以及将歌曲识别到 AcoustID 数据库所需的一些元数据...

                您可以在 https://acoustid.org/ 找到各种客户端库和 Web 服务示例

                【讨论】:

                  猜你喜欢
                  • 2012-02-25
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-09-12
                  • 1970-01-01
                  • 2014-05-31
                  • 1970-01-01
                  • 2013-08-24
                  相关资源
                  最近更新 更多