2010-07-14 31 views
5

Tôi đang cố gắng viết một tập lệnh Python để tìm kiếm các tệp mp3/4 trùng lặp bằng cách sử dụng dữ liệu của bài hát làm cơ sở để so sánh. Tình trạng của tôi liên quan đến nhiều tập tin mp3/4 với tên tập tin tương tự, nhưng thẻ ID3 khác nhau. Lúc đầu, tôi đã thử lặp qua và sử dụng md5 để tìm các tệp trùng lặp (bỏ qua tên tệp). Điều này, tất nhiên, không hoạt động khi các thẻ ID3 không khớp.Truy cập dữ liệu nhạc MP3 bằng cách sử dụng Python

Kết quả là tôi đang tìm cách trích xuất dữ liệu nhạc từ mp3/4 để chạy qua md5 và tìm bất kỳ bản sao nào. cách tốt nhất để làm việc này là gì?

+0

Âm nhạc có thể (trong khi 'giống hệt') có các bitrate khác nhau (trừ khi bạn có thể chắc chắn mọi thứ không mất dữ liệu) sẽ làm cho việc so sánh * dữ liệu đơn giản trở nên vô dụng. Vì vậy, bạn sẽ cần một kỹ thuật tiên tiến hơn (có thể thống kê). Tôi chắc chắn rằng một người nào đó trên SO sẽ có thể cung cấp một số con trỏ ... – ChristopheD

+0

Điểm tốt, thay vì md5 đơn giản một phân tích thường xuyên fft là thích hợp hơn. Tuy nhiên, âm lượng có thể khác nhau. Sau đó, tôi cho rằng bạn sẽ tìm kiếm mối tương quan giữa hai ffts và mong đợi tương quan cao có lẽ? Nó sẽ trở nên phức tạp bởi vì một số bài hát có thể bao gồm "foresounds" - một phần giới thiệu, hoặc một bài phát biểu - rất khó để phát hiện. –

+0

@Hamish: Tôi tự hỏi liệu anh ấy có muốn xem xét những điều đó như là khác biệt hay không (ví dụ: một buổi biểu diễn trực tiếp của một số bài hát, chẳng hạn như phần giới thiệu được nói so với bản thu âm của phòng thu cụ thể). Nó thực sự phụ thuộc vào cách bạn xác định "trùng lặp", tôi giả sử. Điều này đang trở thành một vấn đề khá thú vị. :) – Faisal

Trả lời

4

Hãy thử sử dụng id3-py hoặc mutagen để loại bỏ tất cả các thẻ (cả ID3v1 và ID3v2, cả hai đều có thể trên cùng một tệp), sau đó tính toán MD5 trên kết quả.

Giả sử iTunes không thao tác tệp vượt quá thẻ, chúng phải giống hệt nhau. Chuyển mã rõ ràng sẽ làm cho phương pháp này không hợp lệ.

+0

Trong khi khá nhiều đĩa, loại bỏ các thẻ với Mutagen làm việc ra khá darn tốt. –

0

Điều đó thực sự khá tiên tiến, các công cụ kiểu logic mờ mà bạn đang hỏi.

Đây không phải là một câu trả lời nhưng hãy nhìn vào các cuộc thảo luận trong bài viết này: Detect duplicate MP3 files with different bitrates and/or different ID3 tags? (Nó có thể hội đủ điều kiện như một dupe thực sự ... Nó thậm chí còn Python cụ thể.)

+1

Vấn đề hoàn toàn khác.Những tập tin này là bản sao của cùng một MP3 với các thẻ ID3 khác nhau, vì iTunes cố gắng thông minh và cập nhật các thẻ ID3. Không nên có sự khác biệt nhị phân trong âm nhạc, chỉ có dữ liệu meta. Cảm ơn bạn đã trả lời. = -] –

1

Sử dụng một số thuật toán vân tay. Bạn có thể biết về MusicBrainz. Họ đã liệt kê here một số thuật toán vân tay. Họ sử dụng AcoustId bây giờ mà có lẽ là điều bạn cũng nên sử dụng (nó tốt và nó hoàn toàn miễn phí). Có thư viện Chromaprint có thể tạo vân tay như vậy.

Tôi đã viết Python module ffmpeg giải mã qua FFmpeg và cung cấp chức năng đơn giản để tính toán vân tay AcoustId (sử dụng Chromaprint). Here là một bản demo nhỏ cho điều đó (mà ngay cả truy vấn MusicBrainz cho bài hát).

Nó sẽ dễ dàng để xây dựng một số công cụ sử dụng để tìm tất cả các bản sao.

Dấu vân tay sẽ giống hệt nhau nếu dữ liệu âm thanh giống hệt nhau. Nó sẽ tương tự nếu dữ liệu âm thanh tương tự. Xem số AcoustId homepage để biết thêm thông tin về cách tính độ tương đồng nếu bạn không chỉ muốn kiểm tra sự bình đẳng.

Các vấn đề liên quan