Обнаружить дубликаты файлов MP3 с тегами ID3? - PullRequest
0 голосов
/ 02 февраля 2012

Как я могу обнаружить (желательно Java) дубликаты файлов MP3 с разными тегами ID3? Файлы имеют одинаковую кодировку / формат. Он должен работать с обеими версиями 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-файлов?

Спасибо, ребята, за помощь!

Ответы [ 2 ]

1 голос
/ 12 февраля 2012

Преобразование файлов в необработанный PCM и вывод MD5

Хотя, безусловно, есть способ сделать это в Java, я подозреваю, что может быть быстрее использовать FFmpeg + bash.

for file in *.mp3
do
ffmpeg -i $file -f s16le  - | md5 > $file.md5
done
0 голосов
/ 02 февраля 2012

У меня нет опыта работы с форматами тегов MP3 и ID3, но быстрый просмотр Википедии показывает, что:

ID3v1

ID3v1тег занимает 128 байтов, начиная со строки TAG.Тег был помещен в конец файла

Просто прочитайте весь MP3-файл, пропустив последние 128 байтов.

ID3v2

3,1.Заголовок ID3v2

Размер тега ID3v2 хранится в виде 32-разрядного целочисленного безопасного синхросигнала (раздел 6.2), что составляет в общей сложности 28 эффективных битов (представляющих до 256 МБ).Формат довольно прост.Если файл начинается с заголовка ID3v2, прочитайте общий размер заголовка и пропустите столько байтов.

Получив «сырой» файл, сравните содержимое побайтно или используйте хэш.

...