2008-08-12 22 views

Odpowiedz

1

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

7

Prosty przykład z książki Zanurkuj w Pythonie działa ok dla mnie, this jest link do pobrania, przykładem jest fileinfo.py. Nie wiem, czy to jest najlepsze, ale może wykonać podstawową pracę.

Cała książka jest dostępna online here.

+2

Ten przykład jest nieco przestarzały teraz, zarówno pod względem wersji Pythona i pod względem wersji ID3 ... – Bex

+0

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/) –

1

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.

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

12

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

Tylko notatkę. Ten moduł jest bardzo stary (2002) i nie obsługuje V2 tagów ID3: –

33

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.

+0

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

+1

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

+1

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. –

88

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

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

+7

@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

+2

@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

5

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ć.

8

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

Wystarczy informacja dodatkowa do was:

spójrz na sekcję "Pliki MP3 i edytory metadanych" na stronie PythonInMusic.

0

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.

11

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.

3

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. 
Powiązane problemy