Risposte:
Ho usato eyeD3 l'altro giorno con molto successo. Ho scoperto che poteva aggiungere grafica al tag ID3 che gli altri moduli che ho visto non potevano. Dovrai installare usando pip o scaricare il tar ed eseguirlo python setup.py install
dalla cartella di origine.
Di seguito sono riportati esempi rilevanti dal sito web.
Lettura del contenuto di un file mp3 contenente le informazioni sui tag v1 o v2:
import eyeD3
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
print tag.getArtist()
print tag.getAlbum()
print tag.getTitle()
Leggi un file mp3 (lunghezza della traccia, bitrate, ecc.) E accedi al suo tag:
if eyeD3.isMp3File(f):
audioFile = eyeD3.Mp3AudioFile(f)
tag = audioFile.getTag()
È possibile selezionare versioni di tag specifiche:
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.
Oppure puoi iterare sui frame grezzi:
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
for frame in tag.frames:
print frame
Una volta che un tag è collegato a un file, può essere modificato e salvato:
tag.setArtist(u"Cro-Mags")
tag.setAlbum(u"Age of Quarrel")
tag.update()
Se il tag collegato era v2 e desideri salvarlo come v1:
tag.update(eyeD3.ID3_V1_1)
Leggi un tag e rimuovilo dal file:
tag.link("/some/file.mp3")
tag.remove()
tag.update()
Aggiungi un nuovo 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 minuscola).
Ho già usato mutagen per modificare i tag nei file multimediali. La cosa bella di mutagen è che può gestire altri formati, come mp4, FLAC, ecc. Ho scritto diversi script con molto successo usando questa API.
TIT2
per mp3, title
per ogg, \xa9nam
per mp4, Title
per WMA ecc. - che fa schifo.
Un problema eyed3
è che verrà lanciato NotImplementedError("Unable to write ID3 v2.2")
per i file MP3 comuni.
Nella mia esperienza, la mutagen
classe EasyID3
funziona in modo più affidabile. Esempio:
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()
È possibile accedere a tutti gli altri tag in questo modo e salvarli, il che servirà per la maggior parte degli scopi. Maggiori informazioni possono essere trovate nel Tutorial Mutagen .
Quello che stai cercando è il modulo ID3 . È molto semplice e ti darà esattamente ciò di cui hai bisogno. Copia semplicemente il file ID3.py nella directory dei pacchetti del tuo sito e sarai in grado di fare qualcosa del genere:
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
controlla questo:
https://github.com/Ciantic/songdetails
Esempio di utilizzo:
>>> import songdetails
>>> song = songdetails.scan("data/song.mp3")
>>> print song.duration
0:03:12
Salvataggio delle modifiche:
>>> import songdetails
>>> song = songdetails.scan("data/commit.mp3")
>>> song.artist = "Great artist"
>>> song.save()
Solo informazioni aggiuntive per voi ragazzi:
dai un'occhiata alla sezione " Cose MP3 ed editor di metadati" nella pagina di PythonInMusic .
Un semplice esempio tratto dal libro Dive Into Python funziona bene per me, questo è il link per il download, l'esempio è fileinfo.py. Non so se sia il migliore, ma può fare il lavoro di base.
L'intero libro è disponibile online qui .
Ho guardato le risposte sopra e ho scoperto che non sono adatte al mio progetto a causa di problemi di licenza con GPL.
E ho scoperto questo: PyID3Lib , mentre quella particolare data di rilascio dell'associazione Python è vecchia, utilizza ID3Lib , che a sua volta è aggiornato.
Degno di nota è che entrambi sono LGPL e sono pronti per l'uso.
il metodo più semplice è songdetails ..
per leggere i dati
import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
print song.artist
allo stesso modo per la modifica
import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
song.artist = u"The Great Blah"
song.save()
Non dimenticare di aggiungere u prima del nome finché non conosci la lingua cinese.
puoi leggere e modificare in blocco usando il modulo glob python
ex.
import glob
songs = glob.glob('*') // script should be in directory of songs.
for song in songs:
// do the above work.
Dopo aver provato il pip install
percorso semplice per i moduli eyeD3, pytaglib e ID3 consigliato qui, ho scoperto che questa quarta opzione era l'unica che funzionava. Il resto aveva errori di importazione con dipendenze mancanti in C ++ o qualcosa di magico o qualche altra libreria che pip
mancava. Quindi segui questo per la lettura di base dei tag ID3 (tutte le versioni):
https://pypi.python.org/pypi/tinytag/0.18.0
from tinytag import TinyTag
tag = TinyTag.get('/some/music.mp3')
Elenco dei possibili attributi che puoi ottenere con 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
Era minuscolo e autonomo, come pubblicizzato.
La prima risposta che utilizza eyed3 è obsoleta, quindi ecco una versione aggiornata di esso.
Lettura di tag da un file 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 esempio dal sito web per modificare i tag:
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 problema che ho riscontrato durante il tentativo di utilizzare eyed3 per la prima volta aveva a che fare con un errore di importazione di libmagic anche se era installato. Per risolvere questo problema, installa il magic-bin whl da qui
Suggerirei mp3-tagger . La cosa migliore di questo è che è distribuito con licenza MIT e supporta tutti gli attributi richiesti.
- artist;
- album;
- song;
- track;
- comment;
- year;
- genre;
- band;
- composer;
- copyright;
- url;
- publisher.
Esempio:
from mp3_tagger import MP3File
# Create MP3File instance.
mp3 = MP3File('File_Name.mp3')
# Get all tags.
tags = mp3.get_tags()
print(tags)
Supporta impostare, ottenere, aggiornare ed eliminare gli attributi dei file mp3.
Può dipendere esattamente da cosa vuoi fare oltre alla lettura dei metadati. Se hai bisogno solo del bitrate / nome ecc., E nient'altro, qualcosa di leggero è probabilmente il migliore.
Se stai manipolando il passato mp3, PyMedia potrebbe essere adatto.
Ce ne sono un bel po ', qualunque cosa tu ottenga, assicurati e provalo su molti supporti di esempio. Ci sono alcune versioni differenti dei tag ID3 in particolare, quindi assicurati che non siano troppo obsolete.
Personalmente ho usato questa piccola classe MP3Info con fortuna. È piuttosto vecchio però.
Dopo alcune ricerche iniziali, ho pensato che i dettagli delle canzoni potessero adattarsi al mio caso d'uso, ma non gestisce i file .m4b. Il mutageno lo fa. Nota che mentre alcuni hanno (ragionevolmente) messo in discussione la comparsa di Mutagen di chiavi native del formato, che variano da formato a formato (TIT2 per mp3, titolo per ogg, \ xa9nam per mp4, titolo per WMA ecc.), Mutagen.File ( ) ha un (nuovo?) parametro easy = True che fornisce tag EasyMP3 / EasyID3, che hanno un set di chiavi coerente, anche se limitato. Finora ho eseguito solo test limitati, ma le chiavi comuni, come album, artista, artista dell'album, genere, numero di traccia, numero di disco, ecc. Sono tutte presenti e identiche per i file .mb4 e .mp3 quando si utilizza easy = True, rendendolo molto conveniente per i miei scopi.
utilizzando 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
Ho usato tinytag 1.3.1 perché
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>