2009-01-24 14 views
12

Jak mogę wykryć (najlepiej w Pythonie) duplikaty plików MP3, które mogą być zakodowane z różnymi przepływnościami (ale to ta sama piosenka) i znaczniki ID3, które mogą być niepoprawne?Wykryj zduplikowane pliki MP3 z różnymi bitrate i/lub różnymi znacznikami ID3?

Wiem, że mogę wykonać sumę kontrolną zawartości pliku MD5, ale to nie zadziała dla różnych przepływności. I nie wiem, czy znaczniki ID3 mają wpływ na generowanie sumy kontrolnej MD5. Czy mogę ponownie kodować pliki MP3, które mają inną szybkość transmisji, a następnie mogę wykonać sumę kontrolną? Co polecasz?

+0

Łatwy w użyciu biblioteka Pythona dla robi dokładnie to: https://github.com/worldveil/dejavu – lollercoaster

Odpowiedz

2

Nie sądzę proste kontrolne nigdy pracować:

  1. tagi ID3 wpłynie na md5
  2. różne kodery zakoduje ten sam utwór różne sposoby - tak sumy kontrolne będą różne
  3. Different Prędkości bitowe będą generować różne sumy kontrolne.
  4. Ponowne kodowanie pliku MP3 na inną szybkość transmisji prawdopodobnie będzie brzmiało okropnie i na pewno będzie się różnić od oryginalnego dźwięku skompresowanego w jednym kroku.

Myślę, że będziesz musiał porównać znaczniki ID3, długość piosenki i nazwy plików.

2

Ponowne kodowanie z tą samą szybkością transmisji nie działa, w rzeczywistości może pogorszyć sprawę, ponieważ transkodowanie (to właśnie nazywa się ponowne kodowanie przy różnych przepływnościach) zmieni charakter kompresji, rekompresują już skompresowany plik, co prowadzi do znacznie innego pliku.

To trochę poza moją ligą, ale chciałbym podejść do problemu, patrząc na wzór fal MP3. Albo konwertując MP3 do nieskompresowanego .wav, albo po prostu uruchamiając analizę samego pliku MP3. Powinna tam być biblioteka. Tylko słowo ostrzeżenia, to kosztowna operacja.

Innym pomysłem jest użycie ReplayGain do przeskanowania plików. Jeśli są to ta sama piosenka, powinny być oznaczone tym samym wzmocnieniem. To działa tylko na dokładnie tę samą piosenkę z tego samego albumu. Wiem, że w kilku przypadkach reedycje zostały zremasterowane na wyższym poziomie, zmieniając w ten sposób powtórkę.

EDYTOWANIE:
Możesz chcieć sprawdzić http://www.speech.kth.se/snack/, która najwyraźniej może zrobić wizualizację spektrogramu. Wyobrażam sobie, że każda biblioteka, która może wizualnie spektrogramu, może pomóc ci je porównać.

Ta link z oficjalnej strony Pythona może być również pomocna.

13

Dokładnie to samo pytanie, które ludzie ze starego AudioScrobbler, a obecnie na MusicBrainz pracowali już dawno. Na razie projekt Python, który może pomóc w Twoim zadaniu, to Picard, który oznaczy pliki audio (nie tylko pliki MPEG 1 Layer 3) z identyfikatorem GUID (w rzeczywistości kilku z nich), i od tego momentu dopasowując tagi są dość proste.

Jeśli wolisz zrobić to jako własny projekt, pomocna może być libofa.

+0

także Picard jest open source i może być MusicBrainz używany przez twój własny kod. – David

+0

Interesujące, w jaki sposób Picard generuje ten identyfikator GUID? –

+0

@nemo: po pierwsze, zrozum, czym jest MusicBrainz: http://musicbrainz.org/doc/AboutMusicBrainz. Następnie przeczytaj, w jaki sposób dopasowuje zawartość muzyczną do rekordów bazy danych w http://musicbrainz.org/doc/HowPUIDsWork – tzot

4

Tak jak powiedzieli inni, proste sumy kontrolne nie wykryją duplikatów z różnymi wartościami bitrate lub tagami ID3. Potrzebny jest algorytm odcisków palców audio. Python Audioprocessing Suite ma taki algorytm, ale nie mogę powiedzieć nic o jego niezawodności.

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

3

przypadku problemów Tag, Picard może rzeczywiście być bardzo dobry zakład. Jeśli po zidentyfikowaniu dwóch potencjalnie zduplikowanych plików, chcesz wyodrębnić z nich informacje o przepływności, spójrz na numer mp3guessenc.

1

Używam długości jako mojej podstawowej heurystyki. Właśnie to robi iTunes, gdy próbuje zidentyfikować płytę CD za pomocą Gracenote database. Measure the lengths in milliseconds zamiast sekund. Pamiętaj, że jest to tylko heurystyka: powinieneś zdecydowanie wysłuchać wykrytych duplikatów przed ich usunięciem.

2

Projekt Dejavu jest napisany w języku Python i spełnia dokładnie to, czego szukasz.

https://github.com/worldveil/dejavu

Obsługuje także wiele popularnych formatów (.wav, .mp3, etc), jak również znalezienie czasu odsunięcia od zacisku w oryginalnej ścieżki dźwiękowej.

1

Można użyć następcę na PUID i MusicBrainz, zwany AcoustiD:

AcoustID jest projektem open source, które ma na celu stworzenie wolnego bazy odcisków palców audio z mapowaniem do bazy danych metadanych MusicBrainz i zapewniają serwis internetowy dla dźwięku identyfikacji plików przy użyciu tej bazy danych ...

... odciski palców wraz z niektórych metadanych niezbędne do identyfikacji utworów do bazy AcoustID ...

Znajdziesz różnych bibliotek klienckich i przykładów dla usługa w https://acoustid.org/