Réponses:
J'ai utilisé eyeD3 l'autre jour avec beaucoup de succès. J'ai trouvé qu'il pouvait ajouter des illustrations à la balise ID3, ce que les autres modules que j'ai examinés ne pouvaient pas. Vous devrez installer à l'aide de pip ou télécharger le tar et l'exécuter à python setup.py install
partir du dossier source.
Vous trouverez ci-dessous des exemples pertinents tirés du site Web.
Lecture du contenu d'un fichier mp3 contenant des informations de balise v1 ou v2:
import eyeD3
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
print tag.getArtist()
print tag.getAlbum()
print tag.getTitle()
Lisez un fichier mp3 (longueur de la piste, débit, etc.) et accédez à sa balise:
if eyeD3.isMp3File(f):
audioFile = eyeD3.Mp3AudioFile(f)
tag = audioFile.getTag()
Des versions de balises spécifiques peuvent être sélectionnées:
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.
Ou vous pouvez parcourir les images brutes:
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
for frame in tag.frames:
print frame
Une fois qu'une balise est liée à un fichier, elle peut être modifiée et enregistrée:
tag.setArtist(u"Cro-Mags")
tag.setAlbum(u"Age of Quarrel")
tag.update()
Si le tag lié était v2 et que vous souhaitez l'enregistrer en tant que v1:
tag.update(eyeD3.ID3_V1_1)
Lisez une balise et supprimez-la du fichier:
tag.link("/some/file.mp3")
tag.remove()
tag.update()
Ajouter un nouveau 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
(d minuscule).
J'ai déjà utilisé mutagen pour modifier les balises dans les fichiers multimédias. L'avantage de mutagen est qu'il peut gérer d'autres formats, tels que mp4, FLAC, etc. J'ai écrit plusieurs scripts avec beaucoup de succès en utilisant cette API.
TIT2
pour mp3, title
pour ogg, \xa9nam
pour mp4, Title
pour WMA etc. - ça craint.
Un problème avec eyed3
est qu'il lancera NotImplementedError("Unable to write ID3 v2.2")
des fichiers MP3 courants.
D'après mon expérience, la mutagen
classe EasyID3
fonctionne de manière plus fiable. Exemple:
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()
Toutes les autres balises peuvent être accédées de cette façon et enregistrées, ce qui servira à la plupart des fins. Pour plus d'informations, consultez le didacticiel Mutagen .
Ce que vous recherchez, c'est le module ID3 . C'est très simple et vous donnera exactement ce dont vous avez besoin. Copiez simplement le fichier ID3.py dans votre répertoire site-packages et vous pourrez faire quelque chose comme ce qui suit:
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
vérifiez celui-ci:
https://github.com/Ciantic/songdetails
Exemple d'utilisation:
>>> import songdetails
>>> song = songdetails.scan("data/song.mp3")
>>> print song.duration
0:03:12
Enregistrer les modifications:
>>> import songdetails
>>> song = songdetails.scan("data/commit.mp3")
>>> song.artist = "Great artist"
>>> song.save()
Juste des informations supplémentaires pour vous les gars:
jetez un œil à la section " Trucs MP3 et éditeurs de métadonnées" dans la page de PythonInMusic .
Un exemple simple du livre Plongez au coeur de Python fonctionne bien pour moi, c'est le lien de téléchargement, l'exemple est fileinfo.py. Je ne sais pas si c'est le meilleur, mais cela peut faire le travail de base.
Le livre entier est disponible en ligne ici .
J'ai regardé les réponses ci-dessus et j'ai découvert qu'elles ne sont pas bonnes pour mon projet en raison de problèmes de licence avec GPL.
Et j'ai découvert ceci: PyID3Lib , bien que cette date de sortie de liaison python particulière soit ancienne, elle utilise l' ID3Lib , qui est elle-même à jour.
Il convient de mentionner que les deux sont LGPL et sont prêts à partir.
La méthode la plus simple est les détails de la chanson .
pour lire des données
import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
print song.artist
de même pour modifier
import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
song.artist = u"The Great Blah"
song.save()
N'oubliez pas d'ajouter u avant le nom jusqu'à ce que vous connaissiez la langue chinoise.
vous pouvez lire et éditer en vrac à l'aide du module python glob
ex.
import glob
songs = glob.glob('*') // script should be in directory of songs.
for song in songs:
// do the above work.
Après avoir essayé la pip install
voie simple pour les modules eyeD3, pytaglib et ID3 recommandée ici, j'ai trouvé que cette quatrième option était la seule à fonctionner. Le reste avait des erreurs d'importation avec des dépendances manquantes en C ++ ou quelque chose de magique ou une autre bibliothèque qui pip
manquait. Alors allez avec celui-ci pour la lecture de base des balises ID3 (toutes versions):
https://pypi.python.org/pypi/tinytag/0.18.0
from tinytag import TinyTag
tag = TinyTag.get('/some/music.mp3')
Liste des attributs possibles que vous pouvez obtenir avec 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
C'était minuscule et autonome, comme annoncé.
La première réponse qui utilise eyed3 est obsolète, voici donc une version mise à jour de celle-ci.
Lire des balises à partir d'un fichier 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 exemple du site Web pour modifier les balises:
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
Un problème que j'ai rencontré en essayant d'utiliser eyed3 pour la première fois était lié à une erreur d'importation de libmagic même s'il était installé. Pour résoudre ce problème, installez le magic-bin whl à partir d' ici
Je suggérerais mp3-tagger . La meilleure chose à ce sujet est qu'il est distribué sous licence MIT et prend en charge tous les attributs requis.
- artist;
- album;
- song;
- track;
- comment;
- year;
- genre;
- band;
- composer;
- copyright;
- url;
- publisher.
Exemple:
from mp3_tagger import MP3File
# Create MP3File instance.
mp3 = MP3File('File_Name.mp3')
# Get all tags.
tags = mp3.get_tags()
print(tags)
Il prend en charge définir, obtenir, mettre à jour et supprimer les attributs des fichiers mp3.
Cela peut dépendre exactement de ce que vous voulez faire en plus de la lecture des métadonnées. Si c'est simplement le débit / le nom, etc. dont vous avez besoin, et rien d'autre, quelque chose de léger est probablement le meilleur.
Si vous manipulez le mp3 au-delà, PyMedia peut convenir.
Il y en a pas mal, quoi que vous obteniez, assurez-vous et testez-le sur de nombreux exemples de supports. Il existe en particulier quelques versions différentes des balises ID3, alors assurez-vous qu'elles ne sont pas trop obsolètes.
Personnellement, j'ai utilisé cette petite classe MP3Info avec chance. C'est assez vieux cependant.
Après quelques recherches initiales, j'ai pensé que les détails des morceaux pourraient convenir à mon cas d'utilisation, mais ils ne gèrent pas les fichiers .m4b. Mutagène le fait. Notez que si certains ont (raisonnablement) contesté la mise en évidence par Mutagen des clés natives de format, qui varient d'un format à l'autre (TIT2 pour mp3, titre pour ogg, \ xa9nam pour mp4, titre pour WMA etc.), mutagen.File ( ) a un (nouveau?) paramètre easy = True qui fournit des balises EasyMP3 / EasyID3, qui ont un ensemble de clés cohérent, quoique limité. Je n'ai fait que des tests limités jusqu'à présent, mais les clés communes, comme l'album, l'artiste, l'albumartiste, le genre, le numéro de piste, le numéro de disc, etc. sont toutes présentes et identiques pour les fichiers .mb4 et .mp3 lorsque vous utilisez easy = True, ce qui en fait très pratique pour mes besoins.
en utilisant 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
J'ai utilisé tinytag 1.3.1 car
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>