Cách tốt nhất để lấy siêu dữ liệu mp3 trong python là gì? Tôi đã nhìn thấy một vài khuôn khổ ra khỏi đó, nhưng tôi không chắc chắn sẽ là tốt nhất để sử dụng .... Bất kỳ ý tưởng?Truy cập mp3 Meta-Data bằng Python
Trả lời
This toolkit có thể làm những gì bạn cần. Tôi không thể nói nếu đó là "tốt nhất", nhưng thực sự, nếu nó làm những gì bạn cần, đó là tất cả những vấn đề, phải không?
HTH
Nó có thể phụ thuộc vào chính xác những gì bạn muốn làm ngoài việc đọc siêu dữ liệu. Nếu nó chỉ đơn giản là bitrate/tên vv mà bạn cần, và không có gì khác, một cái gì đó nhẹ có lẽ là tốt nhất.
Nếu bạn đang điều khiển quá khứ mp3 mà PyMedia có thể phù hợp.
Có một số ít, bất cứ điều gì bạn nhận được, hãy đảm bảo và thử nghiệm trên nhiều phương tiện mẫu. Có một vài phiên bản khác nhau của thẻ ID3 nói riêng, vì vậy hãy đảm bảo rằng nó không quá cũ.
Cá nhân tôi đã sử dụng lớp MP3Info nhỏ này với may mắn. Nó là khá cũ mặc dù.
gì bạn đang sau là module ID3. Nó rất đơn giản và sẽ cung cấp cho bạn chính xác những gì bạn cần. Chỉ cần sao chép các tập tin vào thư mục ID3.py site-packages của bạn và bạn sẽ có thể làm điều gì đó như sau:
from ID3 import *
try:
id3info = ID3('file.mp3')
print id3info
# Change the tags
id3info['TITLE'] = "Green Eggs and Ham"
id3info['ARTIST'] = "Dr. Seuss"
for k, v in id3info.items():
print k, ":", v
except InvalidTagError, message:
print "Invalid ID3 tag:", message
Chỉ cần một lưu ý. Mô-đun này rất cũ (2002) và không hỗ trợ V2 của thẻ ID3 –
Tôi đã sử dụng mutagen để chỉnh sửa các thẻ trong các tập tin media trước. Những điều tốt đẹp về mutagen là nó có thể xử lý các định dạng khác, chẳng hạn như mp4, FLAC, vv Tôi đã viết một số kịch bản với rất nhiều thành công bằng cách sử dụng API này.
http://code.google.com/p/quodlibet/ – zgoda
http://code.google.com/p/mutagen/ - Cũng lưu ý rằng Mutagen là GPL, vì vậy đó là không-không cho hầu hết các dự án. – Ciantic
Mutagen là tốt đẹp, tuy nhiên tôi đang thiếu một cách thống nhất để có được các nghệ sĩ, thể loại tiêu đề vv - bạn sẽ phải biết các phím khác nhau, đó là định dạng phụ thuộc. 'TIT2' cho mp3,' title' cho ogg, '\ xa9nam' cho mp4,' Tiêu đề' cho WMA, v.v. –
Nếu bạn có thể sử dụng IronPython, có TagLibSharp. It can be used from any .NET language.
Tôi đã sử dụng eyeD3 vào một ngày khác với nhiều thành công. Tôi thấy rằng nó có thể thêm tác phẩm nghệ thuật vào thẻ ID3 mà các mô-đun khác tôi nhìn không thể. Bạn sẽ phải tải xuống tar và thực hiện python setup.py install
từ thư mục nguồn.
Ví dụ có liên quan từ trang web dưới đây.
Đọc nội dung của một tập tin mp3 có chứa một trong hai v1 hoặc v2 thẻ thông tin:
import eyeD3
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
print tag.getArtist()
print tag.getAlbum()
print tag.getTitle()
Đọc một tập tin mp3 (theo dõi chiều dài, bitrate vv) Và truy cập nó tag:
if eyeD3.isMp3File(f):
audioFile = eyeD3.Mp3AudioFile(f)
tag = audioFile.getTag()
phiên bản thẻ cụ thể có thể được lựa chọn:
tag.link("/some/file.mp3", eyeD3.ID3_V2)
tag.link("/some/file.mp3", eyeD3.ID3_V1)
tag.link("/some/file.mp3", eyeD3.ID3_ANY_VERSION) # The default.
Hoặc bạn có thể duyệt qua các khung thô:
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
for frame in tag.frames:
print frame
Khi thẻ được liên kết với một tệp có thể được sửa đổi và lưu:
tag.setArtist(u"Cro-Mags")
tag.setAlbum(u"Age of Quarrel")
tag.update()
Nếu thẻ được liên kết trong là v2 và bạn muốn lưu nó như v1:
tag.update(eyeD3.ID3_V1_1)
đọc trong một thẻ và loại bỏ nó từ file:
tag.link("/some/file.mp3")
tag.remove()
tag.update()
Thêm một thẻ mới:
tag = eyeD3.Tag()
tag.link('/some/file.mp3') # no tag in this file, link returned False
tag.header.setVersion(eyeD3.ID3_V2_3)
tag.setArtist('Fugazi')
tag.update()
eyeD3 cũng là ** GPL ** ... vì vậy nếu như tôi bạn dự định sử dụng nó trên chương trình của bạn, bạn phải phát hành chương trình của bạn như một chương trình miễn phí cũng ... darn nó với những người này, tại sao họ không thể phát hành theo LGPL? – Ciantic
@Ciantic: Thẻ ID3 cực kỳ đơn giản, tại sao bạn không tự tạo một thư viện và phát hành nó dưới BSD? Hơn nữa, * người này * không sở hữu bạn bất cứ điều gì ở nơi đầu tiên. Nhìn ở đây http://diveintopython.org/object%5Foriented%5Fframework/index.html – voyager
@voyager, thẻ ID3v1 rất đơn giản, thẻ ID3v2 phức tạp như địa ngục ... Và bây giờ tôi đã tạo BSD wrapper cho pytagger http: // github.com/Ciantic/songdetails Tôi chưa gắn thẻ nó như được phát hành, nhưng nó hoạt động. – Ciantic
Tôi đã xem các câu trả lời ở trên và phát hiện ra rằng chúng không tốt cho dự án của tôi vì vấn đề cấp phép với GPL.
Và tôi phát hiện ra điều này: PyID3Lib, trong khi đó ràng buộc python ngày phát hành cũ, nó sử dụng ID3Lib, bản thân nó đã được cập nhật.
Đáng chú ý là cả hai là LGPL và rất tốt để sử dụng.
kiểm tra này ra:
https://github.com/Ciantic/songdetails
Cách sử dụng Ví dụ:
>>> import songdetails
>>> song = songdetails.scan("data/song.mp3")
>>> print song.duration
0:03:12
thay đổi Tiết kiệm: Chỉ cần thêm
>>> import songdetails
>>> song = songdetails.scan("data/commit.mp3")
>>> song.artist = "Great artist"
>>> song.save()
thông tin cho các bạn:
hãy xem phần "Công cụ MP3 và Trình chỉnh sửa siêu dữ liệu" trong trang PythonInMusic.
Sau một số nghiên cứu ban đầu, tôi nghĩ các bản nhạc có thể phù hợp với trường hợp sử dụng của tôi, nhưng nó không xử lý các tệp .m4b. Mutagen. Lưu ý rằng trong khi một số có (hợp lý) đưa ra vấn đề với việc xuất hiện các khóa định dạng của Mutagen, thay đổi từ định dạng sang định dạng (TIT2 cho mp3, tiêu đề cho ogg, \ xa9nam cho mp4, Tiêu đề cho WMA, v.v.), mutagen.File () có tham số (new?) easy = True cung cấp các thẻ EasyMP3/EasyID3, có bộ khóa nhất quán, mặc dù hạn chế. Tôi đã chỉ thực hiện thử nghiệm giới hạn cho đến nay, nhưng các phím chung, như album, nghệ sĩ, nghệ sĩ album, thể loại, tracknumber, discnumber, vv đều có mặt và giống hệt nhau đối với các tệp .mb4 và .mp3 khi sử dụng dễ dàng = True, làm cho nó rất thuận tiện cho mục đích của tôi.
Sự cố với eyed3
là sự cố sẽ ném NotImplementedError("Unable to write ID3 v2.2")
cho các tệp MP3 phổ biến.
Theo kinh nghiệm của tôi, lớp mutagen
EasyID3
hoạt động đáng tin cậy hơn.Ví dụ:
from mutagen.easyid3 import EasyID3
audio = EasyID3("example.mp3")
audio['title'] = u"Example Title"
audio['artist'] = u"Me"
audio['album'] = u"My album"
audio['composer'] = u"" # clear
audio.save()
Tất cả các thẻ khác có thể được truy cập theo cách này và được lưu, sẽ phục vụ hầu hết các mục đích. Bạn có thể tìm thêm thông tin trong số Mutagen Tutorial.
phương pháp đơn giản nhất là songdetails ..
cho dữ liệu đọc
import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
print song.artist
tương tự cho chỉnh sửa
import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
song.artist = u"The Great Blah"
song.save()
Đừng quên để thêm u trước tên sau khi bạn biết ngôn ngữ Trung Quốc .
u có thể đọc và chỉnh sửa hàng loạt bằng mô-đun hình cầu python
ví dụ:
import glob
songs = glob.glob('*') // script should be in directory of songs.
for song in songs:
// do the above work.
Ví dụ này hơi lỗi thời, cả về phiên bản python và phiên bản ID3 ... – Bex
cả hai liên kết đều không hoạt động nữa. (Tôi biết câu trả lời là 9 tuổi) Nếu bạn đang tìm kiếm các cuốn sách trực tuyến "Dive vào Python", đây là [link] hiện tại (http://www.diveintopython.net/) –