2008-08-12 14 views
95

Qual è il modo migliore per recuperare i metadati mp3 in python? Ho visto un paio di quadri là fuori, ma non sono sicuro su quale sarebbe il migliore da usare ... Qualche idea?Accesso a mp3 Meta-Data con Python

risposta

1

This toolkit può fare quello che ti serve. Non posso dire se è il "migliore", ma in realtà, se fa quello che ti serve, è tutto ciò che conta, giusto?

HTH

7

Un semplice esempio dal libro Dive Into Python funziona bene per me, this è il link per il download, l'esempio è fileinfo.py. Non so se è il migliore, ma può fare il lavoro di base.

L'intero libro è disponibile online here.

+2

Questo esempio è un po 'obsolete ora, sia in termini di versione pitone e in termini di ID3 versione ... – Bex

+0

entrambi i collegamenti non sono più di lavoro. (So ​​che la risposta è di 9 anni) Se stai cercando il libro online "Dive into Python", ecco il corrente [link] (http://www.diveintopython.net/) –

1

Può dipendere esattamente da ciò che si desidera fare oltre alla lettura dei metadati. Se è semplicemente il bitrate/nome ecc. Di cui hai bisogno, e nient'altro, qualcosa di leggero è probabilmente il migliore.

Se stai manipolando il passato di mp3 che PyMedia potrebbe essere adatto.

Ci sono un bel po ', qualunque cosa si ottenga, assicurarsi e testare su un sacco di media di esempio. Ci sono alcune versioni differenti dei tag ID3 in particolare, quindi assicurati che non sia troppo obsoleto.

Personalmente ho usato questa piccola classe MP3Info con un po 'di fortuna. È piuttosto vecchio però.

http://www.omniscia.org/~vivake/python/MP3Info.py

12

quello che cercate è il modulo ID3. È molto semplice e ti darà esattamente ciò di cui hai bisogno. Basta copiare il file ID3.py nella directory site-packages e sarete in grado di fare qualcosa di simile al seguente:

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 
+11

Solo una nota. Questo modulo è molto vecchio (2002) e non supporta V2 dei tag ID3 –

33

ho usato mutagen per modificare i tag nei file multimediali prima. La cosa bella del mutageno è che può gestire altri formati, come mp4, FLAC, ecc. Ho scritto diversi script con molto successo usando questa API.

+0

http://code.google.com/p/quodlibet/ – zgoda

+1

http://code.google.com/p/mutagen/ - Si noti inoltre che Mutagen è GPL, quindi è no-no per la maggior parte dei progetti. – Ciantic

+1

Mutagen è bello, ma mi manca un modo uniforme per ottenere l'artista, il genere del titolo ecc. - si finisce per conoscere i vari tasti, che dipendono dal formato. 'TIT2' per mp3,' title' per ogg, '\ xa9nam' per mp4,' Title' per WMA ecc. - questo fa schifo. –

88

Ho utilizzato eyeD3 l'altro giorno con molto successo. Ho scoperto che poteva aggiungere grafica al tag ID3 che gli altri moduli che ho visto non potevano. Dovrai scaricare il tar ed eseguire python setup.py install dalla cartella di origine.

Esempi rilevanti dal sito Web sono di seguito.

Leggendo il contenuto di un file mp3 contenenti sia v1 o tag v2 info:

import eyeD3 
tag = eyeD3.Tag() 
tag.link("/some/file.mp3") 
print tag.getArtist() 
print tag.getAlbum() 
print tag.getTitle() 

leggere un file mp3 (durata del brano, il bitrate, etc.) E l'accesso è tag:

if eyeD3.isMp3File(f): 
    audioFile = eyeD3.Mp3AudioFile(f) 
    tag = audioFile.getTag() 

versioni specifiche dei tag possono essere selezionati:

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. 

Oppure è possibile scorrere i fotogrammi prime:

tag = eyeD3.Tag() 
tag.link("/some/file.mp3") 
for frame in tag.frames: 
    print frame 

Una volta che un tag è correlato a un file può essere modificato e salvato:

tag.setArtist(u"Cro-Mags") 
tag.setAlbum(u"Age of Quarrel") 
tag.update() 

Se il tag collegato in era v2 e vi piacerebbe salvarlo come V1:

tag.update(eyeD3.ID3_V1_1) 

Leggi in un tag e rimuoverlo dal file:

tag.link("/some/file.mp3") 
tag.remove() 
tag.update() 

Aggiungi un nuovo tag:

+14

eyeD3 è anche ** GPL ** ... quindi se come me hai intenzione di usarlo sul tuo programma devi rilasciare il tuo programma come un programma gratuito anche ... dannalo con queste persone, perché non possono rilasciare sotto LGPL? – Ciantic

+7

@Ciantic: i tag ID3 sono estremamente semplici, perché non creare autonomamente una libreria e rilasciarla sotto BSD? Inoltre, * questo popolo * non ti possiede nulla in primo luogo. Guarda qui http://diveintopython.org/object%5Foriented%5Fframework/index.html – voyager

+2

@voyager, i tag ID3v1 sono semplici, i tag ID3v2 sono complicati da morire ... E ora ho creato il wrapper BSD per pytagger http: // github.com/Ciantic/songdetails Non l'ho ancora etichettato come rilasciato, ma funziona. – Ciantic

5

Ho guardato le risposte di cui sopra e ho scoperto che non sono buone per il mio progetto a causa di problemi di licenza con GPL.

E ho scoperto questo: PyID3Lib, mentre vincolante quel particolare pitone data di uscita è vecchio, utilizza il ID3Lib, che è essa stessa fino ad oggi.

Da notare che entrambi sono LGPL e sono a posto.

8

controllare questo fuori:

https://github.com/Ciantic/songdetails

Esempio di utilizzo:

>>> import songdetails 
>>> song = songdetails.scan("data/song.mp3") 
>>> print song.duration 
0:03:12 

cambiamenti di risparmio:

>>> import songdetails 
>>> song = songdetails.scan("data/commit.mp3") 
>>> song.artist = "Great artist" 
>>> song.save() 
5

Basta ulteriori informazioni a voi ragazzi:

dai un'occhiata alla sezione "Archivio MP3 e editor di metadati" nella pagina di PythonInMusic.

0

Dopo alcune ricerche iniziali ho pensato che i dettagli della song potrebbero adattarsi al mio caso d'uso, ma non gestisce i file m4b. Il mutageno sì. Si noti che mentre alcuni hanno (ragionevolmente) preso problema con la superficie di Mutagen delle chiavi native del formato, che variano da formato a formato (TIT2 per mp3, titolo per ogg, \ xa9nam per mp4, Titolo per WMA ecc.), Mutagen.File () ha un (nuovo?) facile = parametro True che fornisce i tag EasyMP3/EasyID3, che hanno un insieme coerente, sebbene limitato, di chiavi. Ho fatto solo test limitati finora, ma i tasti comuni, come album, artista, albumartist, genere, numero di traccia, discnumber, ecc. Sono tutti presenti e identici per i file .mb4 e .mp3 quando si utilizza easy = True, rendendolo molto comodo per i miei scopi.

11

Un problema con eyed3 è che esso genera NotImplementedError("Unable to write ID3 v2.2") per i file MP3 comuni.

In base alla mia esperienza, la classe mutagenEasyID3 funziona in modo più affidabile.Esempio:

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

Tutti gli altri tag può essere letta in questo modo e salvato, che servirà la maggior parte degli scopi. Maggiori informazioni possono essere trovate nel Mutagen Tutorial.

3

metodo più semplice è songdetails ..

per i dati di lettura

import songdetails 
song = songdetails.scan("blah.mp3") 
if song is not None: 
    print song.artist 

simile per la modifica

import songdetails 
song = songdetails.scan("blah.mp3") 
if song is not None: 
    song.artist = u"The Great Blah" 
    song.save() 

Non dimenticare di aggiungere u prima del nome finché non si sa la lingua cinese .

u può leggere e modificare in massa utilizzando il modulo glob python

es.

import glob 
songs = glob.glob('*') // script should be in directory of songs. 
for song in songs: 
    // do the above work.