2010-07-14 2 views
5

Я пытаюсь написать скрипт Python для поиска дубликатов mp3/4 файлов, используя данные песни в качестве базы для сравнения. В моей ситуации много файлов mp3/4 с похожими именами файлов, но разные теги ID3. Сначала я попытался выполнить цикл и использовать md5 для поиска дубликатов файлов (игнорируя имена файлов). Это, конечно, не работало, когда теги ID3 не совпадали.Доступ к музыкальным данным в формате MP3 с использованием Python

В результате я ищу способ извлечь только музыкальные данные из mp3/4, чтобы запустить его через md5 и найти любые дубликаты. Каков наилучший способ сделать это?

+0

Музыка будет (хотя и «идентична») появляться в разных битрейтах (если только вы не можете быть уверены, что все без потерь), что сделает простое сравнение «данных» бесполезным. Поэтому вам понадобится более продвинутая (вероятно, статистическая) техника. Я уверен, что кто-то из SO сможет предоставить некоторые указатели ... – ChristopheD

+0

Хорошая точка, вместо простого md5 более точный анализ частоты fft. Однако объем может быть разным. Тогда, полагаю, вы бы искали корреляцию между двумя ffts и, возможно, ожидали высокой корреляции? Это становится сложно, потому что некоторые песни могут включать в себя «предвидения» - введение или речь, которую трудно обнаружить. –

+0

@ Хамиш: Интересно, если он захочет считать, что они как разные (например, живое выступление какой-то песни, скажем, в разговорной речи, в отличие от конкретной записи в студии). Это действительно зависит от того, как вы определяете «дубликат», я полагаю. Это становится довольно интересной проблемой. :) – Faisal

ответ

4

Попробуйте использовать id3-py или mutagen к вычеркните все теги (как ID3v1, так и ID3v2, они оба могут быть в одном файле), а затем выведите MD5 на результат.

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

+0

В то время как довольно интенсивный диск, сняв теги с Mutagen, выработал довольно неплохо. –

0

Это на самом деле довольно продвинутый, нечеткий тип логического типа, о котором вы спрашиваете.

Это не ответ, но взгляните на обсуждение в этой статье: Detect duplicate MP3 files with different bitrates and/or different ID3 tags? (Это может квалифицироваться как простофиля на самом деле ... Это даже Python-специфичны.)

+1

Полностью другая проблема.Эти файлы являются копиями одного и того же MP3 с разными тегами ID3, поскольку iTunes пытается быть умным и обновлять теги ID3. В музыке не должно быть двоичной разницы, а только метаданных. Спасибо, что ответили. = -] –

1

Используйте некоторые алгоритмы отпечатков пальцев. Вы можете знать о MusicBrainz. Они указали here некоторые алгоритмы отпечатков пальцев. Теперь они используют AcoustId, и это, вероятно, то, что вы должны использовать (это хорошо, и это бесплатно). Существует библиотека Chromaprint, которая может генерировать такой отпечаток.

Я написал Python module ffmpeg, который выполняет декодирование через FFmpeg и предоставляет простую функцию для вычисления отпечатка AcoustId (с использованием Chromaprint). Here - небольшая демонстрация для этого (которая даже запрашивает MusicBrainz для песни).

Для создания всех дубликатов должно быть легко создать какой-либо инструмент.

Отпечаток пальца будет точно таким же, если аудиоданные будут точно такими же. Это будет похоже, если аудиоданные похожи. См. AcoustId homepage для получения дополнительной информации о том, как вы рассчитываете сходство, если вы не просто хотите проверить равенство.

Смежные вопросы