Care este cel mai bun mod de a prelua metadatele mp3 în Python? Am vazut un cuplu de cadre acolo, dar eu nu sunt sigur ce ar fi cel mai bun pentru a folosi .... Orice idei?
This toolkit may do what you need. I can't say if it's the "best", but really, if it does what you need, that's all that matters, right?
HTH
Acesta poate depinde exact de ceea ce doriți să faceți în plus față de citirea metadatelor. Dacă este doar pur și simplu bitrate/nume etc care aveți nevoie, și nimic altceva, ceva ușor este probabil cel mai bun.
Dacă manipulezi trecutul mp3-ului, PyMedia poate fi potrivit.
Există destul de puține lucruri, indiferent ce faceți, asigurați-vă și testați-le pe o mulțime de materiale de probă. Există câteva versiuni diferite ale etichetelor ID3, în special, deci asigurați-vă că nu este prea depășit.
Personal am folosit această mică clasă MP3Info cu noroc. Este totuși destul de vechi.
Ceea ce urmăriți este modulul ID3 . Este foarte simplu și vă va oferi exact ceea ce aveți nevoie. Doar copiați fișierul ID3.py în directorul dvs. de pachete de site-uri și veți putea să faceți ceva de genul:
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
Am folosit mutagen pentru a edita etichete în fișiere media înainte. Lucru frumos despre mutagen este că se poate ocupa de alte formate, cum ar fi mp4, FLAC etc. Am scris mai multe scenarii cu mult succes folosind acest API.
Dacă puteți folosi IronPython, există TagLibSharp. Poate fi folosit din orice limbă .NET .
Am folosit eyeD3 ziua următoare cu mult succes. Am constatat că ar putea adăuga opere de artă la eticheta ID3 pe care celelalte module pe care le-am privit nu au putut. Va trebui să descărcați tarul și să executați python setup.py install
din folderul sursă.
Exemple relevante de pe site sunt de mai jos.
Citirea conținutului unui fișier mp3 care conține fie eticheta v1, fie eticheta v2:
import eyeD3
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
print tag.getArtist()
print tag.getAlbum()
print tag.getTitle()
Citiți un fișier mp3 (lungime piesă, bitrate etc.) și accesați eticheta:
if eyeD3.isMp3File(f):
audioFile = eyeD3.Mp3AudioFile(f)
tag = audioFile.getTag()
Pot fi selectate versiuni specifice ale tagurilor:
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.
Sau aveți posibilitatea să repetați peste cadrele brute:
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
for frame in tag.frames:
print frame
Odată ce o etichetă este conectată la un fișier, aceasta poate fi modificată și salvată:
tag.setArtist(u"Cro-Mags")
tag.setAlbum(u"Age of Quarrel")
tag.update()
Dacă tag-ul conectat a fost v2 și doriți să-l salvați ca v1:
tag.update(eyeD3.ID3_V1_1)
Citiți într-o etichetă și eliminați-o din fișier:
tag.link("/some/file.mp3")
tag.remove()
tag.update()
Adăugați o etichetă nouă:
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()
M-am uitat la răspunsurile de mai sus și am aflat că nu sunt bune pentru proiectul meu din cauza problemelor de licențiere cu GPL.
Și am aflat acest lucru: PyID3Lib , în timp ce data lansării python binding particulară este veche , utilizează ID3Lib , care însăși este actualizată.
Este de remarcat faptul că ambele sunt LGPL și sunt bune pentru a merge.
verificați acest lucru:
https://github.com/Ciantic/songdetails
Exemplu de utilizare:
>>> import songdetails
>>> song = songdetails.scan("data/song.mp3")
>>> print song.duration
0:03:12
Salvarea modificărilor:
>>> import songdetails
>>> song = songdetails.scan("data/commit.mp3")
>>> song.artist = "Great artist"
>>> song.save()
Doar informații suplimentare pentru voi:
aruncați o privire la secțiunea "Editare de chestii MP3 și metadate" în pagina PythonInMusic .
După unele cercetări inițiale, am crezut că detaliile melodiei se potrivesc cu cazul meu de utilizare, dar nu se ocupă de fișierele .m4b. Mutagenul are. Rețineți că, în timp ce unii dintre ei au luat (în mod rezonabil) o problemă cu acoperirea cu chei native a formatului Mutagen, care variază de la format la format (TIT2 pentru mp3, titlu pentru ogg, mpx pentru mp4, Titlu pentru WMA etc.), mutagen.File ) are un parametru (new?) easy = True care oferă etichete EasyMP3/EasyID3, care au un set consistent, deși limitat, de taste. Am făcut doar teste limitate până acum, dar cheile comune, cum ar fi albumul, artistul, albumaristul, genul, tracknumber, discnumber, etc. sunt toate prezente și identice pentru fișierele .mb4 și .mp3 când se utilizează easy = True foarte convenabil pentru scopurile mele.
O problemă cu eyed3
este că va arunca NotImplementedError ("Imposibil de scris ID3 v2.2")
pentru fișierele MP3 obișnuite.
Din experiența mea, clasa mutagen
EasyID3
funcționează mai fiabil. Exemplu:
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()
Toate celelalte etichete pot fi accesate în acest fel și salvate, ceea ce va servi majorității scopurilor. Mai multe informații pot fi găsite în Tutorial despre mutații .
cea mai simplă metodă este detalii despre melodii ..
pentru datele citite
import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
print song.artist
în mod similar pentru editare
import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
song.artist = u"The Great Blah"
song.save()
Nu uitați să adăugați u înaintea numelui, până când cunoașteți limba chineză.
u poate citi și edita în bloc utilizând modulul python glob
ex.
import glob
songs = glob.glob('*') //script should be in directory of songs.
for song in songs:
//do the above work.
Primul răspuns care utilizează eyed3 este depășit, deci este o versiune actualizată a acestuia.
Citirea etichetelor dintr-un fișier mp3:
import eyed3
audiofile = eyed3.load("some/file.mp3")
print(audiofile.tag.artist)
print(audiofile.tag.album)
print(audiofile.tag.album_artist)
print(audiofile.tag.title)
print(audiofile.tag.track_num)
Un exemplu de pe site pentru modificarea etichetelor:
import eyed3
audiofile = eyed3.load("some/file.mp3")
audiofile.tag.artist = u"Integrity"
audiofile.tag.album = u"Humanity Is The Devil"
audiofile.tag.album_artist = u"Integrity"
audiofile.tag.title = u"Hollow"
audiofile.tag.track_num = 2
An issue I encountered while trying to use eyed3 for the first time had to do with an import error of libmagic even though it was installed. To fix this install the magic-bin whl from here
După ce am încercat modul simplu pip install
pentru modulele eyeD3, pytaglib și ID3 recomandate aici, am găsit că această opțiune a fost singura care a funcționat. Restul a avut erori de import cu dependente lipsă în C ++ sau ceva magic sau altă bibliotecă care a ratat pip
. Deci, mergeți cu acesta pentru citirea de bază a etichetelor ID3 (toate versiunile):
https://pypi.python.org/pypi/tinytag/0.18.0
from tinytag import TinyTag
tag = TinyTag.get('/some/music.mp3')
Lista de atribute posibile pe care le puteți obține cu TinyTag:
tag.album # album as string
tag.albumartist # album artist as string
tag.artist # artist name as string
tag.audio_offset # number of bytes before audio data begins
tag.bitrate # bitrate in kBits/s
tag.disc # disc number
tag.disc_total # the total number of discs
tag.duration # duration of the song in seconds
tag.filesize # file size in bytes
tag.genre # genre as string
tag.samplerate # samples per second
tag.title # title of the song
tag.track # track number as string
tag.track_total # total number of tracks as string
tag.year # year or data as string
Era mic și de sine stătătoare, așa cum se făcea publicitate.