2010-07-14 7 views
5

비교를 위해 노래의 데이터를 사용하여 중복 된 mp3/4 파일을 검색하는 Python 스크립트를 작성하려고합니다. 내 상황에는 유사한 파일 이름을 가진 많은 mp3/4 파일이 있지만 ID3 태그는 다릅니다. 처음에는 md5를 반복적으로 사용하여 중복 파일 (파일 이름 무시)을 찾았습니다. 물론 이것은 ID3 태그가 일치하지 않을 때 작동하지 않았습니다.Python을 사용하여 MP3 음악 데이터에 액세스

결과적으로 mp3/4에서 음악 데이터 만 추출하여 md5를 실행하고 중복 된 음악을 찾을 수있는 방법을 찾고 있습니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

+0

음악은 '단순'* 데이터 비교를 쓸모 없게 만들 것입니다. (모든 것이 무손실 인 경우가 아니라면) 음악은 아마도 다른 비트율로 나타납니다. 따라서보다 고급 (아마도 통계적) 기법이 필요합니다. 나는 누군가가 다음과 같은 몇 가지 지침을 제공 할 수있을 것이라고 확신합니다. – ChristopheD

+0

간단한 md5 대신 좋은 점, fft 빈도 분석이 더 적절합니다. 그러나 볼륨이 다를 수 있습니다. 그럼 당신은 두 ffts 사이의 상관 관계를 찾고 아마도 높은 상관 관계를 기대 가정? 어떤 곡에는 인트로 나 연설 같은 "foresounds"가 포함될 수 있기 때문에 까다로워집니다. –

+0

@Hamish : 그가 다른 것으로 생각하고 싶어하는지 궁금합니다 (예를 들어, 특정 인트로 대 특정 스튜디오 레코딩과 함께 일부 노래의 라이브 연주). 그것은 정말로 "중복"을 정의하는 방법에 달려 있습니다. 이것은 꽤 흥미로운 문제가되고 있습니다. :) – Faisal

답변

4

id3-py 또는 mutagen를 사용해보십시오 모든 태그 (ID3v1과 ID3v2 둘 다 동일한 파일에있을 수 있음)를 제거한 다음 결과에서 MD5를 계산합니다.

iTunes가 태그를 넘어서 파일을 조작하지 않는다고 가정하면 동일해야합니다. 명백하게 트랜스 코딩하면이 방법이 무효가됩니다.

+0

꽤 많은 디스크를 사용하는 동안 Mutagen으로 태그를 제거하면 꽤 잘 처리됩니다. –

0

사실 꽤 고급스러운 퍼지 로직 타입의 물건입니다.

는 답변은 아니지만이 문서의 논의를 살펴 : Detect duplicate MP3 files with different bitrates and/or different ID3 tags?는 (그것은 심지어 파이썬 고유의 ... 속는 실제로 자격 수 있습니다.)

+1

완전히 다른 문제입니다.이 파일은 iTunes가 똑똑하고 ID3 태그를 업데이트하려고하기 때문에 다른 ID3 태그가있는 동일한 MP3 파일의 복사본입니다. 음악에는 바이너리 차이가 없어야하며 메타 데이터 만 존재해야합니다. 그래도 고마워. = -] –

1

일부 지문 알고리즘을 사용하십시오. MusicBrainz에 대해 알 수 있습니다. 그들은 here 일부 지문 알고리즘을 나열했습니다. 그들은 현재 AcoustId를 사용하고 있습니다. 아마도 AcoustId도 사용해야합니다 (좋은 것이고 무료입니다). 이러한 지문을 생성 할 수있는 라이브러리는 Chromaprint입니다.

나는 FFmpeg를 통해 해독을 수행하고 Chromaprint를 사용하여 AcoustId 지문을 계산하는 간단한 기능을 제공하는 Python module ffmpeg을 작성했습니다. Here은 (음악에 대한 MusicBrainz를 쿼리하는) 작은 데모입니다.

모든 중복을 찾으려면 도구를 사용하여 도구를 쉽게 작성해야합니다.

오디오 데이터가 정확히 동일하면 지문이 정확히 동일합니다. 오디오 데이터가 유사하면 유사합니다. 평등을 확인하고 싶지 않은 경우 유사성을 계산하는 방법에 대한 자세한 내용은 AcoustId homepage을 참조하십시오.

관련 문제