Какой самый быстрый способ определить, являются ли два файла MP3 дубликатами? - PullRequest
4 голосов
/ 03 августа 2011

Я хочу написать программу, которая удаляет дубликаты музыкальных файлов iTunes.Один из подходов к выявлению дубликатов заключается в сравнении MD5-дайджестов файлов MP3 и M4A.Есть ли более эффективная стратегия?

Кстати, команда меню «Показать дубликаты» в iTunes показывает ложные срабатывания.Видимо, он просто сравнивает строки заголовка Artist и Track.

1 Ответ

3 голосов
/ 03 августа 2011

Если вы используете хэши для сравнения двух наборов данных, в идеале они должны иметь одинаковый вход каждый раз, чтобы получить абсолютно одинаковый вывод (если только вы чудесным образом не выбрали два столкновения с разными входами, что привело к одному выходу ). Если вы хотите сравнить два файла MP3, хэшируя весь файл, тогда два набора данных песни могут быть абсолютно одинаковыми, но, поскольку ID3 хранится внутри файла, несоответствия могут привести к тому, что файлы окажутся совершенно разными. Поскольку вы используете хеш, вы не заметите, что, возможно, 99% из двух файлов совпадают, поскольку выходные данные будут слишком разными.

Если вы действительно хотите использовать для этого хеш, вам следует хэшировать только звуковые данные, исключая любые теги, которые могут быть прикреплены к файлу. Это не рекомендуется, если, например, музыка копируется с компакт-дисков, а один и тот же компакт-диск копируется два раза, результаты могут кодироваться / сжиматься по-разному в зависимости от параметров копирования.

Лучшей (но гораздо более сложной) альтернативой была бы попытка сравнить несжатые значения аудиоданных. С небольшим методом проб и ошибок с известными входами можно привести достойный алгоритм. Делать это идеально будет очень сложно (если вообще возможно), но если вы получите что-то с точностью более 50%, это будет лучше, чем делать это вручную.

Обратите внимание, что даже алгоритм, который может определить, близки ли две песни (скажем, одна и та же песня, скопированная под разными параметрами), должен быть более сложным, чем стоило бы сказать, если живая версия похожа на студийную. , Если вы можете сделать это, здесь можно заработать!

И возвращаясь к первоначальной идее о том, как быстро определить, являются ли они дубликатами. Хеш будет намного быстрее, но намного менее точным, чем любой алгоритм с этой целью. Это скорость против точности и сложности.

...