【问题标题】:Detect duplicate MP3 files with ID3 tags?检测带有 ID3 标签的重复 MP3 文件?
【发布时间】:2012-02-25 04:15:14
【问题描述】:

如何检测(最好是 Java)具有不同 ID3 标签的重复 MP3 文件?这些文件具有相同的编码/格式。它应该适用于 ID3 的两个版本:ID3v1 和 ID3v2。

到目前为止,这是我的代码。但它不适用于 Id3v1 标签。

try {

       String filepath = "c:\tmp";

       Vector<String> mp3_files = new Vector<String>();
       mp3_files.add(filepath + "test_with_id3.mp3");
       mp3_files.add(filepath + "test_without_id3");

       Iterator<String> i_mp3fp = mp3_files.iterator();

       while (i_mp3fp.hasNext()){

          String mp3_fp = i_mp3fp.next();

          AudioInputStream din = null;
          File file = new File(mp3_fp);
          AudioInputStream in = AudioSystem.getAudioInputStream(file);
          AudioFormat baseFormat = in.getFormat();

          AudioFormat decodedFormat = new AudioFormat(
             AudioFormat.Encoding.PCM_SIGNED,
             baseFormat.getSampleRate(), 16, baseFormat.getChannels(),
             baseFormat.getChannels() * 2, baseFormat.getSampleRate(),
             false);
          din = AudioSystem.getAudioInputStream(decodedFormat, in);

          String md5 = org.apache.commons.codec.digest.DigestUtils.md5Hex( din );
          System.out.println("Name: "+mp3_fp+" | Hash: "+md5);
          din.close();

}

当我这样做时,我想我必须将 mp3 与不同的编码进行比较。无论如何。 我认为更好的解决方案是只读取 mp3 文件 - 忽略所有 id3 标签 - 做一个校验和并比较它们。是否有读取和过滤 mp3 文件的库?

谢谢大家的帮助!

【问题讨论】:

    标签: java file mp3 duplicates id3


    【解决方案1】:

    我对 MP3 和 ID3 标签格式没有任何经验,但快速浏览一下 Wikipedia 就会发现:

    ID3v1

    ID3v1 标签占用 128 个字节,以字符串 TAG 开头。标签放在文件末尾

    只读取整个 MP3 文件,跳过最后 128 个字节。

    ID3v2

    3.1。 ID3v2 标头

    ID3v2 标记大小存储为 32 位同步安全整数(第 6.2 节),总共有 28 个有效位(最多 256MB)。

    标题格式非常简单。如果文件以 ID3v2 标头开头,则读取总标头大小并跳过那么多字节。

    获得“原始”文件后,逐字节比较内容或使用哈希。

    【讨论】:

      【解决方案2】:

      将文件转换为原始 PCM,输出为 MD5

      虽然在 Java 中肯定有办法做到这一点,但我怀疑使用 FFmpeg + bash 可能会更快。

      for file in *.mp3
      do
      ffmpeg -i $file -f s16le  - | md5 > $file.md5
      done
      

      【讨论】:

        猜你喜欢
        • 2010-10-03
        • 2011-09-12
        • 1970-01-01
        • 1970-01-01
        • 2013-08-24
        • 1970-01-01
        • 1970-01-01
        • 2017-02-01
        • 1970-01-01
        相关资源
        最近更新 更多