2012-08-25 15 views
5

Sto cercando di aggiornare i metadati di un gruppo di file mp3 utilizzando Python e la sua API eyeD3.Python + eyeD3: impossibile salvare la data sui metadati mp3

Sembra abbastanza semplice, il codice sto usando appare come segue:

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

ciò che accade è: codice viene eseguito in silenzio (nessun errore o eccezioni), il titolo è impostato correttamente, la data non è set nel file di destinazione. Rimane vuoto o impostato sul valore precedente (verificato in entrambi i casi).

Aiuto per la funzione setDate non è particolarmente divertente:

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

... ma mi dice che la mia chiamata dovrebbe essere ok. Qualche idea su cosa sta succedendo qui?

+0

Avendo gettato uno sguardo sul codice sorgente, non vedo nulla di chiaramente sbagliato. –

+0

Ho scoperto che la riga di comando eyeD3 fa esattamente la stessa cosa: non cambia la data, ma non riporta alcun errore. Avendo una scadenza in arrivo, ho usato Mutagen per questo scopo. Immagino che abbiamo un bug in eyeD3 da qualche parte. – zencodism

risposta

3

Ho la stessa domanda come la tua. Infine, ho abbandonato il lib eyeD3, mutagen è una buona opzione.

Ecco il mio esempio utilizzando mutagen.mp3 in 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() 
Problemi correlati