Odpowiedzi:
Użyłem eyeD3 pewnego dnia z dużym sukcesem. Odkryłem, że może dodać grafikę do tagu ID3, czego inne moduły, które oglądałem, nie mogły. Będziesz musiał zainstalować za pomocą pip lub pobrać tar i uruchomić python setup.py install
z folderu źródłowego.
Odpowiednie przykłady ze strony internetowej są poniżej.
Odczytywanie zawartości pliku mp3 zawierającego informacje o tagach v1 lub v2:
import eyeD3
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
print tag.getArtist()
print tag.getAlbum()
print tag.getTitle()
Przeczytaj plik mp3 (długość ścieżki, szybkość transmisji itp.) I uzyskaj dostęp do jego tagu:
if eyeD3.isMp3File(f):
audioFile = eyeD3.Mp3AudioFile(f)
tag = audioFile.getTag()
Można wybrać określone wersje tagów:
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.
Lub możesz iterować po surowych klatkach:
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
for frame in tag.frames:
print frame
Po połączeniu tagu z plikiem można go modyfikować i zapisywać:
tag.setArtist(u"Cro-Mags")
tag.setAlbum(u"Age of Quarrel")
tag.update()
Jeśli powiązany tag to v2 i chcesz go zapisać jako v1:
tag.update(eyeD3.ID3_V1_1)
Wczytaj tag i usuń 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()
import eyed3
(małe litery d).
Użyłem mutagen edycji tagów w plikach multimedialnych wcześniej. Zaletą mutagenu jest to, że obsługuje on inne formaty, takie jak mp4, FLAC itp. Napisałem kilka skryptów, które z dużym powodzeniem wykorzystały ten interfejs API.
TIT2
dla mp3, title
dla ogg, \xa9nam
dla mp4, Title
dla WMA itp. - to jest do bani.
Problem eyed3
polega na tym, że wyrzuci NotImplementedError("Unable to write ID3 v2.2")
zwykłe pliki 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()
W ten sposób można uzyskać dostęp do wszystkich innych tagów i je zapisać, co będzie służyć większości celów. Więcej informacji znajdziesz w samouczku dotyczącym mutagenu .
To, czego szukasz, to moduł ID3 . To bardzo proste i zapewni Ci dokładnie to, czego potrzebujesz. Po prostu skopiuj plik ID3.py do katalogu site-packages, a będziesz mógł zrobić coś takiego:
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
sprawdź to:
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()
Tylko dodatkowe informacje dla was:
zajrzyj do sekcji „Edytory plików MP3 i metadanych” na stronie PythonInMusic .
Prosty przykład z książki Dive Into Python działa dla mnie dobrze, to jest link do pobrania, przykład to fileinfo.py. Nie wiem, czy jest najlepszy, ale może wykonać podstawową pracę.
Cała książka jest dostępna online tutaj .
Przejrzałem powyższe odpowiedzi i stwierdziłem, że nie są one dobre dla mojego projektu z powodu problemów licencyjnych z GPL.
I dowiedziałem się, że: PyID3Lib , chociaż ta konkretna data wydania powiązania Pythona jest stara, używa ID3Lib , który sam w sobie jest aktualny.
Warto wspomnieć, że oba są LGPL i są gotowe do użycia.
najłatwiejszą metodą są szczegóły dotyczące utworów .
do odczytu danych
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ą, dopóki nie poznasz języka chińskiego.
Możesz czytać i edytować zbiorczo za pomocą modułu python glob
dawny.
import glob
songs = glob.glob('*') // script should be in directory of songs.
for song in songs:
// do the above work.
Po wypróbowaniu prostej pip install
trasy dla modułów eyeD3, pytaglib i ID3 zalecanych tutaj stwierdziłem, że ta czwarta opcja była jedyną działającą. Reszta miała błędy importu z brakującymi zależnościami w C ++ lub czymś magicznym lub inną biblioteką, której pip
brakowało. Więc idź z tym do podstawowego odczytu tagów ID3 (wszystkie wersje):
https://pypi.python.org/pypi/tinytag/0.18.0
from tinytag import TinyTag
tag = TinyTag.get('/some/music.mp3')
Lista możliwych atrybutów, które możesz uzyskać za pomocą 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
Jak reklamowano, był mały i samodzielny.
Pierwsza odpowiedź, która używa eyed3, jest nieaktualna, więc oto jej zaktualizowana wersja.
Odczytywanie tagów z pliku 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)
Przykład ze strony do modyfikacji tagów:
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
Problem, który napotkałem podczas pierwszej próby użycia eyed3, dotyczył błędu importu libmagic, mimo że został zainstalowany. Aby to naprawić, zainstaluj stąd magic-bin whl
Proponuję mp3-tagger . Najlepsze w tym jest to, że jest rozpowszechniany na licencji MIT i obsługuje wszystkie wymagane atrybuty.
- artist;
- album;
- song;
- track;
- comment;
- year;
- genre;
- band;
- composer;
- copyright;
- url;
- publisher.
Przykład:
from mp3_tagger import MP3File
# Create MP3File instance.
mp3 = MP3File('File_Name.mp3')
# Get all tags.
tags = mp3.get_tags()
print(tags)
Obsługuje ustawianie, pobieranie, aktualizowanie i usuwanie atrybutów plików mp3.
Może to zależeć od tego, co chcesz zrobić, oprócz czytania metadanych. Jeśli potrzebujesz tylko bitrate / nazwy itp., I nic więcej, coś lekkiego jest prawdopodobnie najlepsze.
Jeśli manipulujesz przeszłością mp3, PyMedia może być odpowiednia.
Jest ich sporo, cokolwiek otrzymasz, upewnij się i przetestuj to na wielu przykładowych nośnikach. W szczególności istnieje kilka różnych wersji tagów ID3, więc upewnij się, że nie są one zbyt nieaktualne.
Osobiście użyłem tej małej klasy MP3Info z odrobiną szczęścia. Jest jednak dość stary.
Po kilku wstępnych badaniach pomyślałem, że szczegóły dotyczące utworów mogą pasować do mojego przypadku użycia, ale nie obsługują plików .m4b. Mutagen tak. Zauważ, że chociaż niektórzy (rozsądnie) mieli problem z wyświetlaniem przez Mutagena kluczy natywnych dla formatu, które różnią się w zależności od formatu (TIT2 dla mp3, tytuł dla ogg, \ xa9nam dla mp4, tytuł dla WMA itp.), Mutagen.File ( ) ma (nowy?) parametr easy = True, który zapewnia tagi EasyMP3 / EasyID3, które mają spójny, aczkolwiek ograniczony zestaw kluczy. Jak dotąd przeprowadziłem tylko ograniczone testy, ale wspólne klucze, takie jak album, wykonawca, artysta albumu, gatunek, numer utworu, numer płyty itp., Są obecne i identyczne dla plików .mb4 i .mp3, gdy używam easy = True, dzięki czemu bardzo wygodne dla moich celów.
używając https://github.com/nicfit/eyeD3
import eyed3
import os
for root, dirs, files in os.walk(folderp):
for file in files:
try:
if file.find(".mp3") < 0:
continue
path = os.path.abspath(os.path.join(root , file))
t = eyed3.load(path)
print(t.tag.title , t.tag.artist)
#print(t.getArtist())
except Exception as e:
print(e)
continue
Użyłem tinytag 1.3.1, ponieważ
1.3.0 (2020-03-09):
added option to ignore encoding errors ignore_errors #73
Improved text decoding for many malformed files
MP3 (ID3 v1, v1.1, v2.2, v2.3+)
Wave/RIFF
OGG
OPUS
FLAC
WMA
MP4/M4A/M4B
from tinytag import TinyTag
fileNameL ='''0bd1ab5f-e42c-4e48-a9e6-b485664594c1.mp3
0ea292c0-2c4b-42d4-a059-98192ac8f55c.mp3
1c49f6b7-6f94-47e1-a0ea-dd0265eb516c.mp3
5c706f3c-eea4-4882-887a-4ff71326d284.mp3
'''.split()
for fn in fileNameL:
fpath = './data/'+fn
tag = TinyTag.get(fpath)
print()
print('"artist": "%s",' % tag.artist)
print('"album": "%s",' % tag.album)
print('"title": "%s",' % tag.title)
print('"duration(secs)": "%s",' % tag.duration)
JoeTagPj>python joeTagTest.py
"artist": "Conan O’Brien Needs A Friend",
"album": "Conan O’Brien Needs A Friend",
"title": "17. Thomas Middleditch and Ben Schwartz",
"duration(secs)": "3565.1829583532785",
"artist": "Conan O’Brien Needs A Friend",
"album": "Conan O’Brien Needs A Friend",
"title": "Are you ready to make friends?",
"duration(secs)": "417.71840447045264",
"artist": "Conan O’Brien Needs A Friend",
"album": "Conan O’Brien Needs A Friend",
"title": "Introducing Conan’s new podcast",
"duration(secs)": "327.22187551899646",
"artist": "Conan O’Brien Needs A Friend",
"album": "Conan O’Brien Needs A Friend",
"title": "19. Ray Romano",
"duration(secs)": "3484.1986772305863",
C:\1d\PodcastPjs\JoeTagPj>