Accesarea metadatelor mp3 cu Python

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?

0
fr hi bn

15 răspunsuri

Un exemplu simplu din cartea Dive Into Python funcționează bine pentru mine, acest este link-ul de descărcare, exemplul este fileinfo.py. Nu știu dacă este cel mai bun, dar poate face treaba de bază.

Întreaga carte este disponibilă online aici .

0
adăugat
ambele linkuri nu mai funcționează. (Știu că răspunsul este de 9 ani) Dacă sunteți în căutarea pentru carte online "Dive în Python", aici este actualul link
adăugat autor Edwin van Mierlo, sursa
Acest exemplu este un pic depășit acum, atât în ​​ceea ce privește versiunea Python, cât și în ceea ce privește versiunea ID3 ...
adăugat autor Bex, sursa

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

0
adăugat

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()
0
adăugat

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.

0
adăugat
Mutagenul este frumos, dar îmi lipsește o cale uniformă de a obține artistul, genul de titlu etc. - în cele din urmă, trebuie să cunoașteți diferitele chei care sunt dependente de format. TIT2 pentru mp3, title pentru ogg, \ xa9nam pentru mp4, Titlu pentru WMA etc.
adăugat autor Anony-Mousse, sursa
adăugat autor zgoda, sursa
code.google.com/p/mutagen - De asemenea, rețineți că Mutagen este GPL, astfel încât este nu-nu pentru majoritatea proiectelor.
adăugat autor Ciantic, sursa

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 .

0
adăugat

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.

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

0
adăugat

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
0
adăugat
Doar o notă. Acest modul este foarte vechi (2002) și nu suportă V2 de tag-uri ID3
adăugat autor Eli Bendersky, sursa

Dacă puteți folosi IronPython, există TagLibSharp. Poate fi folosit din orice limbă .NET .

0
adăugat

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()
0
adăugat
Rețineți că aceste note sunt pentru o versiune mai veche a lui eyed3 și nu vor mai funcționa. De exemplu, funcția link() a dispărut și atributele sunt setate declarativ acum, fără setteri.
adăugat autor mlissner, sursa
Din păcate, majoritatea acestor comenzi sunt depășite acum și chiar și codul actualizat eyed3 aruncă erori pentru fișierele MP3 obișnuite. Mai bine să utilizați mutagen clasa EasyID3 așa cum se arată în acest răspuns .
adăugat autor Chris Redford, sursa
@voyager - linkul diveintopython este mort.
adăugat autor Bulwersator, sursa
@Ciantic: Etichetele ID3 sunt extrem de simple, de ce nu faceți o librărie și eliberați-o sub BSD? În plus, oamenii ăștia nu vă dețin nimic în primul rând. Uită-te aici diveintopython.org/object%5Foriented%5Fframework/index.html
adăugat autor Esteban Küber, sursa
adăugat autor Esteban Küber, sursa
eyeD3 este, de asemenea, GPL ... deci dacă pe mine planuiți să-l folosiți pe programul dvs., trebuie să eliberați programul ca și program gratuit ... de presă sub LGPL?
adăugat autor Ciantic, sursa
@voyager, etichetele ID3v1 sunt simple, etichetele ID3v2 sunt complicate ca dracu '... Și acum am creat un BSD wrapper pentru pytagger github.com/Ciantic/songdetails Nu l-am marcat încă ca fiind lansat, dar funcționează.
adăugat autor Ciantic, sursa
În versiunea mai nouă, folosiți importați eyed3 (d).
adăugat autor Mark W, sursa

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.

0
adăugat

Doar informații suplimentare pentru voi:

aruncați o privire la secțiunea "Editare de chestii MP3 și metadate" în pagina PythonInMusic .

0
adăugat

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.

0
adăugat

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.
0
adăugat

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

0
adăugat

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.

0
adăugat
Python România
Python România
100 participanți

Comunitatea pasionaților de Python din România.