Подтвердить что ты не робот

Обнаружение дубликатов файлов MP3 с различными битрейтами и/или разными тегами ID3?

Как я могу обнаружить (желательно с Python) дубликаты файлов MP3, которые могут быть закодированы с разными битрейтами (но они являются одной и той же песней) и тегами ID3, которые могут быть неверными?

Я знаю, что могу выполнить MD5 контрольную сумму содержимого файлов, но это не сработает для разных битрейтов. И я не знаю, влияют ли теги ID3 на генерацию контрольной суммы MD5. Должен ли я перекодировать файлы MP3, имеющие другой битрейт, а затем я могу сделать контрольную сумму? Что вы рекомендуете?

4b9b3361

Ответ 1

Точно такой же вопрос, что люди из старого AudioScrobbler и в настоящее время на MusicBrainz работали уже давно. В настоящее время проект Python, который может помочь в вашем квесте, Picard, который будет помечать аудиофайлы (не только MPEG 1 Layer 3 файла) с GUID (фактически, несколько из них), и с этого момента совпадение тегов довольно просто.

Если вы предпочитаете делать это как собственный проект, libofa может помочь.

Ответ 2

Как и другие, простые контрольные суммы не будут обнаруживать дубликаты с разными битрейтами или тегами ID3. Вам нужен звуковой алгоритм отпечатка пальца. В Python Audioprocessing Suite есть такой алгоритм, но я не могу сказать ничего о том, насколько он надежный.

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

Ответ 3

Для проблем с тегами Picard действительно может быть очень хорошей ставкой. Если, идентифицировав два потенциально повторяющихся файла, вы хотите извлечь из них информацию о битрейтах, посмотрите mp3guessenc.

Ответ 4

Я не думаю, что когда-либо будут работать простые контрольные суммы:

  • Теги ID3 будут влиять на md5
  • Различные кодировщики будут кодировать одну и ту же песню разными способами - так что контрольные суммы будут отличаться
  • Различные битовые скорости будут выдавать разные контрольные суммы.
  • Повторное кодирование mp3 с другой скоростью передачи данных, вероятно, будет звучать ужасно и, конечно же, будет отличаться от исходного аудио, сжатого за один шаг.

Думаю, вам придется сравнивать теги ID3, длину песни и имена файлов.

Ответ 5

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

Это немного из моей лиги, но я бы подошел к проблеме, посмотрев на волновой рисунок MP3. Либо путем преобразования MP3 в uncompressd.wav, либо, возможно, просто запустите анализ самого файла MP3. Для этого должна быть библиотека. Просто предупреждение, это дорогостоящая операция.

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

EDIT:
Возможно, вы захотите проверить http://www.speech.kth.se/snack/, который, по-видимому, может выполнять визуализацию спектрограмм. Я полагаю, что любая библиотека, которая может визуально отображать спектрограмму, может помочь вам сравнить их.

Эта ссылка на официальной странице python также может быть полезна.

Ответ 6

Проект Dejavu написан на Python и делает именно то, что вы ищете.

https://github.com/worldveil/dejavu

Он также поддерживает множество распространенных форматов (.wav,.mp3 и т.д.), а также находит временное смещение клипа в исходной звуковой дорожке.

Ответ 8

Я использовал бы длину как свою первую эвристику. Это то, что делает iTunes при попытке идентифицировать компакт-диск с помощью базы данных Gracenote. Измерьте длину в миллисекундах, а не секунды. Помните, что это только эвристика: вы должны обязательно прослушивать любые обнаруженные дубликаты перед их удалением.

Ответ 9

Вы можете использовать преемника для PUID и MusicBrainz, называемый AcoustiD:

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

... отпечатки пальцев вместе с некоторыми метаданными, необходимыми для идентификации песен в базе данных AcoustID...

Вы найдете различные клиентские библиотеки и примеры для веб-службы в https://acoustid.org/