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

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

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

Ответы [ 9 ]

15 голосов
/ 24 января 2009

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

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

4 голосов
/ 25 января 2009

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

http://rudd -o.com / новые-проекты / питон-audioprocessing

3 голосов
/ 25 февраля 2009

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

2 голосов
/ 19 мая 2014

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

https://github.com/worldveil/dejavu

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

2 голосов
/ 24 января 2009

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

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

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

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

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

2 голосов
/ 24 января 2009

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

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

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

1 голос
/ 11 января 2015

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

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

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

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

1 голос
/ 20 января 2011

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

1 голос
/ 07 марта 2010

Я ищу что-то подобное, и я нашел это:
http://www.lastfm.es/user/nova77LF/journal/2007/10/12/4kaf_fingerprint_(command_line)_client

Надеюсь, это поможет.

...