2012-08-25 23 views
5

Tôi đang cố cập nhật siêu dữ liệu của một loạt tệp mp3 bằng Python và API EyeD3 của nó.Python + eyeD3: không thể lưu ngày thành siêu dữ liệu mp3

Nó trông khá đơn giản, mã Tôi đang sử dụng vẻ bề ngoài như sau:

if not eyeD3.isMp3File(filename): 
    print filename, 'is not a mp3 file. Ignoring it.' 
tag = eyeD3.Tag() 
tag.link(filename) 
tag.setVersion(eyeD3.ID3_V2) 
tag.setTextEncoding(eyeD3.UTF_8_ENCODING) 
tag.setTitle(dataset['Title']) 
tag.setDate(datetime.datetime.now().year) 
tag.update() 

gì xảy ra là: Mã thực hiện âm thầm (không có lỗi hoặc ngoại lệ), danh hiệu được thiết lập một cách chính xác, cập nhật là không bộ trong tệp đích. Nó vẫn trống hoặc được đặt thành giá trị trước đó (đã kiểm tra cả hai trường hợp).

trợ giúp cho chức năng setDate không particulary gây cười:

setDate(self, year, month=None, dayOfMonth=None, hour=None, minute=None, second=None, fid=None) unbound eyeD3.tag.Tag method 

... nhưng nói với tôi rằng cuộc gọi của tôi nên ok. Bất kỳ ý tưởng gì đang xảy ra ở đây?

+0

Nhìn lướt qua mã nguồn, tôi không thấy bất cứ điều gì rõ ràng là sai. –

+0

Phát hiện ra rằng dòng lệnh eyeD3 thực hiện chính xác như cũ: không thay đổi ngày tháng, nhưng cũng không báo cáo bất kỳ lỗi nào. Có thời hạn đến, tôi sử dụng Mutagen cho mục đích này. Tôi đoán chúng tôi chỉ có một lỗi trong eyeD3 một nơi nào đó. – zencodism

Trả lời

3

Tôi có cùng câu hỏi với câu hỏi của bạn. Cuối cùng, tôi từ bỏ lib eyeD3, mutagen là một lựa chọn tốt.

Đây là ví dụ của tôi bằng cách sử dụng mutagen.mp3 bằng Python.

from mutagen.mp3 import MP3 
from mutagen.id3 import ID3, APIC, TIT2, TPE1, TRCK, TALB, USLT, error 
# ID3 info: 
# APIC: picture 
# TIT2: title 
# TPE1: artist 
# TRCK: track number 
# TALB: album 
# USLT: lyric 
def id3_cook(directory, filename, item, track_num): 
    pic_file = directory + '/cover.jpg' # pic file 
    audio = MP3(filename, ID3=ID3) 
    try: 
     audio.add_tags() 
    except: 
     pass 
    audio.tags.add(APIC(
     encoding=3, 
     mime='image/jpeg', 
     type=3, 
     desc=u'Cover Picture', 
     data=open(pic_file).read() 
    )) 
    audio.tags.add(TIT2(encoding=3, text=item['song'].decode('utf-8'))) 
    audio.tags.add(TALB(encoding=3, text=item['album'].decode('utf-8'))) 
    audio.tags.add(TPE1(encoding=3, text=item['artist'].decode('utf-8'))) 
    audio.tags.add(TRCK(encoding=3, text=str(track_num).decode('utf-8'))) 
    audio.tags.add(USLT(encoding=3, lang=u'eng', desc=u'desc', text=item['lyric'].decode('utf-8'))) 
    audio.save()