2012-08-25 8 views
5

Próbuję zaktualizować metadane wiązki plików mp3 przy użyciu języka Python i jego interfejsu API eyeD3.Python + eyeD3: nie można zapisać daty na metadane mp3

Wygląda to dość proste, kod używam wygląda następująco:

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() 

Co się dzieje: kod wykonywany po cichu (nie ma błędów i wyjątki), tytuł jest ustawiony prawidłowo, data jest nie zestaw w pliku docelowym. Pozostaje pusty lub ustawiony na poprzednią wartość (zaznaczone są oba przypadki).

Pomoc dla funkcji setDate nie jest szczególnie zabawne:

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

... ale mówi mi, że moje wezwanie powinno być ok. Jakieś pomysły, co się tutaj dzieje?

+0

Po zerknięciu na kod źródłowy nie widzę niczego oczywistego. –

+0

Okazało się, że linia poleceń eyeD3 robi dokładnie to samo: nie zmienia daty, ale nie zgłasza żadnego błędu. Po zbliżającym się terminie użyłem Mutagen do tego celu. Chyba mamy gdzieś błąd w eyeD3. – zencodism

Odpowiedz

3

Mam takie samo pytanie jak twoje. Wreszcie, porzuciłem eyeD3 lib, mutagen jest dobrym rozwiązaniem.

Oto mój przykład przy użyciu mutagen.mp3 w języku 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() 
Powiązane problemy