Antworten:
Ich habe neulich eyeD3 mit viel Erfolg benutzt. Ich fand heraus, dass es dem ID3-Tag Grafiken hinzufügen konnte, die die anderen Module, die ich mir ansah, nicht konnten. Sie müssen mit pip installieren oder den tar herunterladen und python setup.py install
aus dem Quellordner ausführen .
Relevante Beispiele von der Website sind unten.
Lesen des Inhalts einer MP3-Datei mit Informationen zu v1- oder v2-Tags:
import eyeD3
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
print tag.getArtist()
print tag.getAlbum()
print tag.getTitle()
Lesen Sie eine MP3-Datei (Titellänge, Bitrate usw.) und greifen Sie auf das Tag zu:
if eyeD3.isMp3File(f):
audioFile = eyeD3.Mp3AudioFile(f)
tag = audioFile.getTag()
Bestimmte Tag-Versionen können ausgewählt werden:
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.
Oder Sie können über die Rohrahmen iterieren:
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
for frame in tag.frames:
print frame
Sobald ein Tag mit einer Datei verknüpft ist, kann es geändert und gespeichert werden:
tag.setArtist(u"Cro-Mags")
tag.setAlbum(u"Age of Quarrel")
tag.update()
Wenn das verknüpfte Tag v2 war und Sie es als v1 speichern möchten:
tag.update(eyeD3.ID3_V1_1)
Lesen Sie ein Tag ein und entfernen Sie es aus der Datei:
tag.link("/some/file.mp3")
tag.remove()
tag.update()
Fügen Sie ein neues Tag hinzu:
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
(Kleinbuchstaben d).
Ich habe zuvor Mutagen verwendet , um Tags in Mediendateien zu bearbeiten. Das Schöne an Mutagen ist, dass es andere Formate wie mp4, FLAC usw. verarbeiten kann. Ich habe mehrere Skripte mit viel Erfolg mit dieser API geschrieben.
TIT2
für mp3, title
für ogg, \xa9nam
für mp4, Title
für WMA etc. - das ist scheiße.
Ein Problem mit eyed3
ist, dass es NotImplementedError("Unable to write ID3 v2.2")
für gängige MP3-Dateien werfen wird .
Nach meiner Erfahrung arbeitet die mutagen
Klasse EasyID3
zuverlässiger. Beispiel:
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()
Auf alle anderen Tags kann auf diese Weise zugegriffen und gespeichert werden, was den meisten Zwecken dient. Weitere Informationen finden Sie im Mutagen Tutorial .
Was Sie suchen, ist das ID3- Modul. Es ist sehr einfach und gibt Ihnen genau das, was Sie brauchen. Kopieren Sie einfach die ID3.py-Datei in Ihr Site-Packages-Verzeichnis, und Sie können Folgendes tun:
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
Schau dir das an:
https://github.com/Ciantic/songdetails
Anwendungsbeispiel:
>>> import songdetails
>>> song = songdetails.scan("data/song.mp3")
>>> print song.duration
0:03:12
Änderungen speichern:
>>> import songdetails
>>> song = songdetails.scan("data/commit.mp3")
>>> song.artist = "Great artist"
>>> song.save()
Nur zusätzliche Informationen an euch:
Schauen Sie sich den Abschnitt "MP3- Inhalte und Metadaten-Editoren" auf der Seite von PythonInMusic an .
Ein einfaches Beispiel aus dem Buch Dive Into Python funktioniert für mich in Ordnung. Dies ist der Download-Link. Das Beispiel ist fileinfo.py. Ich weiß nicht, ob es das Beste ist, aber es kann den grundlegenden Job machen.
Das gesamte Buch ist hier online verfügbar .
Ich habe mir die obigen Antworten angesehen und festgestellt, dass sie aufgrund von Lizenzproblemen mit der GPL nicht für mein Projekt geeignet sind.
Und ich habe Folgendes herausgefunden: PyID3Lib verwendet zwar das Veröffentlichungsdatum der Python-Bindung , verwendet jedoch die ID3Lib , die selbst auf dem neuesten Stand ist.
Bemerkenswert ist, dass beide LGPL sind und gut zu gehen sind.
Die einfachste Methode sind Songdetails .
zum Lesen von Daten
import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
print song.artist
ähnlich zum bearbeiten
import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
song.artist = u"The Great Blah"
song.save()
Vergessen Sie nicht , hinzuzufügen u vor Namen , bis Sie chinesische Sprache kennen.
Sie können mit dem Python Glob-Modul in großen Mengen lesen und bearbeiten
Ex.
import glob
songs = glob.glob('*') // script should be in directory of songs.
for song in songs:
// do the above work.
Nachdem pip install
ich die hier empfohlene einfache Route für eyeD3-, pytaglib- und ID3-Module ausprobiert hatte, stellte ich fest, dass diese vierte Option die einzige war, die funktionierte. Der Rest hatte Importfehler mit fehlenden Abhängigkeiten in C ++ oder etwas Magischem oder einer anderen Bibliothek, die pip
fehlte. Gehen Sie also mit diesem zum grundlegenden Lesen von ID3-Tags (alle Versionen):
https://pypi.python.org/pypi/tinytag/0.18.0
from tinytag import TinyTag
tag = TinyTag.get('/some/music.mp3')
Liste möglicher Attribute, die Sie mit TinyTag erhalten können:
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
Es war winzig und in sich geschlossen, wie angekündigt.
Die erste Antwort, die eyed3 verwendet, ist veraltet. Hier ist eine aktualisierte Version davon.
Tags aus einer MP3-Datei lesen:
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)
Ein Beispiel von der Website zum Ändern von Tags:
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
Ein Problem, auf das ich beim ersten Versuch mit eyed3 gestoßen bin, hatte mit einem Importfehler von libmagic zu tun, obwohl es installiert war. Um dies zu beheben, installieren Sie den Magic-Bin Whl von hier aus
Ich würde mp3-tagger vorschlagen . Das Beste daran ist, dass es unter MIT-Lizenz vertrieben wird und alle erforderlichen Attribute unterstützt.
- artist;
- album;
- song;
- track;
- comment;
- year;
- genre;
- band;
- composer;
- copyright;
- url;
- publisher.
Beispiel:
from mp3_tagger import MP3File
# Create MP3File instance.
mp3 = MP3File('File_Name.mp3')
# Get all tags.
tags = mp3.get_tags()
print(tags)
Es unterstützt das Festlegen, Abrufen, Aktualisieren und Löschen von Attributen von MP3-Dateien.
Es kann genau davon abhängen, was Sie zusätzlich zum Lesen der Metadaten tun möchten. Wenn Sie nur die Bitrate / den Namen usw. benötigen und sonst nichts, ist wahrscheinlich etwas Leichtes am besten.
Wenn Sie die MP3-Datei manipulieren, ist PyMedia möglicherweise geeignet.
Es gibt ziemlich viele, was auch immer Sie bekommen, stellen Sie sicher und testen Sie es auf vielen Beispielmedien. Insbesondere gibt es einige verschiedene Versionen von ID3-Tags. Stellen Sie daher sicher, dass diese nicht zu veraltet sind.
Persönlich habe ich diese kleine MP3Info-Klasse mit etwas Glück benutzt. Es ist allerdings ziemlich alt.
Nach anfänglichen Recherchen dachte ich, dass Songdetails zu meinem Anwendungsfall passen könnten, aber es werden keine .m4b-Dateien verarbeitet. Mutagen tut es. Beachten Sie, dass einige (vernünftigerweise) Probleme mit Mutagens Auftauchen von format-nativen Schlüsseln haben, die jedoch von Format zu Format variieren (TIT2 für mp3, Titel für ogg, \ xa9nam für mp4, Titel für WMA usw.), mutagen.File ( ) hat einen (neuen?) easy = True-Parameter, der EasyMP3 / EasyID3-Tags bereitstellt, die einen konsistenten, wenn auch begrenzten Schlüsselsatz haben. Bisher habe ich nur begrenzte Tests durchgeführt, aber die allgemeinen Tasten wie Album, Künstler, Albumartist, Genre, Tracknummer, Discnumber usw. sind alle vorhanden und für .mb4- und .mp3-Dateien identisch, wenn easy = True verwendet wird sehr praktisch für meine Zwecke.
Verwenden von 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
Ich habe tinytag 1.3.1 verwendet, weil
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>