Jaki jest najlepszy sposób na odzyskanie metadanych mp3 w pythonie? Widziałem już kilka frameworków, ale nie jestem pewien, który z nich byłby najlepszy do wykorzystania. Jakieś pomysły?Uzyskiwanie dostępu do metadanych z mp3 Python
Odpowiedz
może zrobić to, czego potrzebujesz. Nie mogę powiedzieć, czy to jest "najlepsze", ale tak naprawdę, jeśli robi to, czego potrzebujesz, to wszystko ma znaczenie, prawda?
HTH
Może to zależeć od tego, co dokładnie chcesz robić, oprócz czytania metadanych. Jeśli jest to po prostu bitrate/name itp., Czego potrzebujesz, i nic więcej, coś lekkiego jest prawdopodobnie najlepsze.
Jeśli manipulujesz przeszłością pliku mp3, PyMedia może być odpowiednia.
Jest ich kilka, cokolwiek otrzymasz, upewnij się i przetestuj na wielu próbnych nośnikach. Istnieje kilka różnych wersji tagów ID3, więc upewnij się, że nie jest zbyt przestarzały.
Osobiście użyłem tej małej klasy MP3Info z powodzeniem. Jest dość stary.
Co jesteś po to moduł ID3. To bardzo proste i daje dokładnie to, czego potrzebujesz. Wystarczy skopiować plik ID3.py do katalogu site-packages i będziesz w stanie zrobić coś jak następuje:
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
Tylko notatkę. Ten moduł jest bardzo stary (2002) i nie obsługuje V2 tagów ID3: –
Użyłem mutagen aby przed edytować tagi w plikach multimedialnych. Zaletą mutagena jest to, że może on obsługiwać inne formaty, takie jak mp4, FLAC itp. Napisałem kilka skryptów z dużym sukcesem za pomocą tego API.
http://code.google.com/p/quodlibet/ – zgoda
http://code.google.com/p/mutagen/ - Należy również pamiętać, że Mutagen jest GPL, więc nie jest to możliwe w przypadku większości projektów. – Ciantic
Mutagen jest fajny, ale brakuje mi jednolitego sposobu na zdobycie artysty, tytułowego gatunku itp. - w końcu musisz znać różne klawisze, które zależą od formatu. 'TIT2' dla mp3,' title' dla ogg, '\ xa9nam' dla mp4,' Title' dla WMA itd. - to jest do bani. –
Jeśli możesz użyć IronPython, istnieje TagLibSharp. It can be used from any .NET language.
Ostatnio użyłem eyeD3 z dużym sukcesem. Odkryłem, że może dodać grafikę do tagu ID3, którego inne moduły, na które patrzyłem, nie mogą. Musisz pobrać tar i wykonać python setup.py install
z folderu źródłowego.
Odpowiednie przykłady ze strony znajdują się poniżej.
Odczytywanie zawartości pliku mp3 zawierające zarówno v1 lub v2 tag informację:
import eyeD3
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
print tag.getArtist()
print tag.getAlbum()
print tag.getTitle()
odczytać plik mp3 (długość toru, bitrate, itp) I dostęp to tag: można wybrać
if eyeD3.isMp3File(f):
audioFile = eyeD3.Mp3AudioFile(f)
tag = audioFile.getTag()
Poszczególne wersje tag:
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.
Albo można iteracyjne nad surowych ram:
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
for frame in tag.frames:
print frame
Gdy znacznik jest połączony z plik można zmodyfikować i zapisać:
tag.setArtist(u"Cro-Mags")
tag.setAlbum(u"Age of Quarrel")
tag.update()
Jeśli tag związany był v2 i chcesz go zapisać jako V1:
tag.update(eyeD3.ID3_V1_1)
odczytywane tagu i usunąć go z pliku:
tag.link("/some/file.mp3")
tag.remove()
tag.update()
Dodaj nowy tag:
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()
eyeD3 jest również ** GPL ** ... więc jeśli jak ja planujesz użyć go na swoim programie, musisz zwolnić swój program jako darmowy program ... cóż to z tymi ludźmi, dlaczego nie mogą wydać LGPL? – Ciantic
@Ciantic: tagi ID3 są niezwykle proste. Dlaczego nie stworzysz biblioteki samodzielnie i nie wydasz jej w BSD? Ponadto, * ci ludzie * nie mają nic do ciebie w pierwszej kolejności. Zajrzyj tutaj http://diveintopython.org/object%5Foriented%5Fframework/index.html – voyager
@voyager, tagi ID3v1 są proste, tagi ID3v2 są skomplikowane jak diabli ... A teraz stworzyłem opakowanie BSD dla pytagger http: // github.com/Ciantic/songdetails Nie oznakowałem tego jeszcze jako wydanego, ale działa. – Ciantic
Sprawdziłem powyższe odpowiedzi i okazało się, że nie są one dobre dla mojego projektu z powodu problemów licencyjnych z GPL.
A ja dowiedziałem to: PyID3Lib, podczas wiązania, które szczególnie pyton data wydania jest stary, używa ID3Lib, która sama jest aktualne.
Warto wspomnieć, że oba są LGPL, i dobrze jest jechać.
check to jeden z:
https://github.com/Ciantic/songdetails
Przykład użycia:
>>> import songdetails
>>> song = songdetails.scan("data/song.mp3")
>>> print song.duration
0:03:12
zapisywania zmian:
>>> import songdetails
>>> song = songdetails.scan("data/commit.mp3")
>>> song.artist = "Great artist"
>>> song.save()
Wystarczy informacja dodatkowa do was:
spójrz na sekcję "Pliki MP3 i edytory metadanych" na stronie PythonInMusic.
Po kilku wstępnych badaniach pomyślałem, że songdetails mogą pasować do mojego przypadku użycia, ale nie obsługuje plików .m4b. Mutagen ma. Zauważ, że chociaż niektórzy (rozsądnie) podnieśli problem z wynurzaniem przez Mutagena natywnych kluczy formatowania, które różnią się od formatu do formatu (TIT2 dla mp3, tytuł dla ogg, \ xa9nam dla mp4, tytuł dla WMA itp.), Mutagen.File () ma (nowy?) parametr easy = True, który udostępnia znaczniki EasyMP3/EasyID3, które mają spójny, choć ograniczony zestaw kluczy. Do tej pory przeprowadziłem tylko ograniczone testy, ale wspólne klucze, takie jak album, artysta, albumart, gatunek, tracknumber, discnumber itp. Są obecne i identyczne dla plików .mb4 i .mp3 przy użyciu easy = True, dzięki czemu bardzo wygodne dla moich celów.
Problem z eyed3
polega na tym, że spowoduje on wygenerowanie NotImplementedError("Unable to write ID3 v2.2")
dla typowych plików MP3.
Z mojego doświadczenia wynika, że mutagen
klasa EasyID3
działa bardziej niezawodnie.Przykład:
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()
Wszystkie inne znaczniki mogą być dostępne w ten sposób i zapisane, co będzie służyć większości celów. Więcej informacji można znaleźć w Mutagen Tutorial.
Najprostszym sposobem jest songdetails ..
danych odczytanych
import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
print song.artist
podobnie do edycji
import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
song.artist = u"The Great Blah"
song.save()
Nie zapomnij dodać u przed nazwą aż znasz język chiński .
u może czytać i edytować zbiorczo za pomocą modułu GLOB Python
ex.
import glob
songs = glob.glob('*') // script should be in directory of songs.
for song in songs:
// do the above work.
Ten przykład jest nieco przestarzały teraz, zarówno pod względem wersji Pythona i pod względem wersji ID3 ... – Bex
oba linki nie są już działa. (Wiem, że odpowiedź ma 9 lat) Jeśli szukasz książki online "Zanurz się w Pythonie", tutaj jest aktualny [link] (http://www.diveintopython.net/) –