Tilgang mp3 Meta-Data med Python

stemmer
99

Hva er den beste måten å hente mp3 metadata i python? Jeg har sett et par rammer der ute, men jeg er usikker på noe som ville være best å bruke .... Noen ideer?

Publisert på 12/08/2008 klokken 15:16
kilden bruker
På andre språk...                            


16 svar

stemmer
91

Jeg brukte eyeD3 den andre dagen med mye suksess. Jeg fant ut at det kunne legge kunstverk til ID3 tag som de andre modulene jeg så på kunne ikke. Du må laste ned tjære og kjøre python setup.py installfra kildemappen.

Relevante eksempler fra nettsiden finnes nedenfor.

Å lese innholdet i en mp3-fil som inneholder enten v1 eller v2 tag info:

 import eyeD3
 tag = eyeD3.Tag()
 tag.link("/some/file.mp3")
 print tag.getArtist()
 print tag.getAlbum()
 print tag.getTitle()

Les en mp3-fil (spor lengde, bitrate, etc.) og tilgang det tag:

if eyeD3.isMp3File(f):
     audioFile = eyeD3.Mp3AudioFile(f)
     tag = audioFile.getTag()

Spesifikke tag versjoner kan velges:

 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.

Eller du kan iterere over den rå rammer:

 tag = eyeD3.Tag()
 tag.link("/some/file.mp3")
 for frame in tag.frames:
    print frame

Når en kode er knyttet til en fil kan det være endret og lagret:

 tag.setArtist(u"Cro-Mags")
 tag.setAlbum(u"Age of Quarrel")
 tag.update()

Hvis koden koblet på var v2, og du ønsker å lagre det som v1:

 tag.update(eyeD3.ID3_V1_1)

Les i en kode og fjerne det fra filen:

 tag.link("/some/file.mp3")
 tag.remove()
 tag.update()

Legg til en ny 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()
Svarte 19/09/2008 kl. 14:30
kilden bruker

stemmer
33

Jeg har brukt mutagen å redigere tagger i mediefiler før. Det fine med mutagen er at den kan håndtere andre formater, som MP4, FLAC etc. Jeg har skrevet flere manus med mye suksess med denne API.

Svarte 14/08/2008 kl. 09:46
kilden bruker

stemmer
12

Det du leter etter er ID3 -modulen. Det er veldig enkelt og vil gi deg akkurat det du trenger. Bare kopiere ID3.py filen i site-pakker katalog, og du vil være i stand til å gjøre noe sånt som følgende:

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
Svarte 13/08/2008 kl. 00:44
kilden bruker

stemmer
11

Et problem med eyed3er at det vil kaste NotImplementedError("Unable to write ID3 v2.2")for vanlige MP3-filer.

I min erfaring, den mutagenklassen EasyID3fungerer mer pålitelig. Eksempel:

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

Alle andre koder kan nås på denne måten og lagret, som vil tjene de fleste formål. Mer informasjon finner du i Mutagen Tutorial .

Svarte 24/01/2016 kl. 00:07
kilden bruker

stemmer
8

sjekke dette ut:

https://github.com/Ciantic/songdetails

Bruk eksempel:

>>> import songdetails
>>> song = songdetails.scan("data/song.mp3")
>>> print song.duration
0:03:12

Besparende endringer:

>>> import songdetails
>>> song = songdetails.scan("data/commit.mp3")
>>> song.artist = "Great artist"
>>> song.save()
Svarte 30/12/2010 kl. 01:40
kilden bruker

stemmer
7

Et enkelt eksempel fra boken Dive Into Python fungerer ok for meg, dette er koblingen for nedlasting, eksempelet er fileinfo.py. Vet ikke om det er den beste, men det kan gjøre det grunnleggende jobb.

Hele boken er tilgjengelig på nettet her .

Svarte 12/08/2008 kl. 15:37
kilden bruker

stemmer
5

Bare tilleggsinformasjon til dere:

ta en titt på avsnittet "MP3 ting og Metadata redaktører" på siden av PythonInMusic .

Svarte 08/07/2011 kl. 08:24
kilden bruker

stemmer
5

Jeg så de ovennevnte svar og fant ut at de ikke er bra for mitt prosjekt på grunn av lisensiering problemer med GPL.

Og jeg fant ut dette: PyID3Lib , mens den aktuelle python binding utgivelsesdato er gammel, bruker den ID3Lib , som selv er oppdatert.

Bemerkelsesverdig å nevne er at begge er LGPL , og er god til å gå.

Svarte 20/12/2009 kl. 19:32
kilden bruker

stemmer
4

enkleste metoden er songdetails ..

for lese data

import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
    print song.artist

tilsvarende for redigering

import songdetails
song = songdetails.scan("blah.mp3")
if song is not None:
    song.artist = u"The Great Blah"
    song.save()

Ikke glem å legge u før navn før du vet kinesisk språk.

u kan lese og redigere i bulk ved hjelp av python glob modulen

ex.

import glob
songs = glob.glob('*')   // script should be in directory of songs.
for song in songs:
    // do the above work.
Svarte 11/08/2016 kl. 09:05
kilden bruker

stemmer
1

Etter å ha prøvd den enkle pip installruten for eyeD3, pytaglib, og ID3 moduler anbefalte her, fant jeg denne fjerde alternativet var den eneste til å fungere. Resten hadde importfeil med manglende avhengigheter i C ++ eller noe magi eller noen andre bibliotek som pipsavnet. Så gå med dette en for enkel lesing av ID3-tags (alle versjoner):

https://pypi.python.org/pypi/tinytag/0.18.0

from tinytag import TinyTag
tag = TinyTag.get('/some/music.mp3')

Listen over mulige egenskaper du kan få med 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

Det var liten og selvstendig, som annonsert.

Svarte 16/04/2018 kl. 01:34
kilden bruker

stemmer
1

Det kan avhenge av hva du vil gjøre i tillegg til å lese metadata. Hvis det er bare rett og slett den bitrate / navn etc. som du trenger, og ingenting annet, noe lett er trolig best.

Hvis du manipulere mp3 fortid som PyMedia kan være egnet.

Det er ganske mange, uansett hva du får, sørg for og teste det ut på mange prøve medier. Det finnes flere ulike versjoner av ID3 tagger i særdeleshet, så sørg for at det ikke er for utdatert.

Personlig har jeg brukt denne lille MP3Info klasse med hell. Det er ganske gamle skjønt.

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

Svarte 12/08/2008 kl. 15:37
kilden bruker

stemmer
1

Dette verktøysettet kan gjøre hva du trenger. Jeg kan ikke si om det er den "beste", men egentlig, er hvis den gjør det du trenger er alt som teller, ikke sant?

HTH

Svarte 12/08/2008 kl. 15:32
kilden bruker

stemmer
0

Jeg foreslår at mp3-taggeren . Beste ting om dette er det distribueres under MIT License og støtter alle de nødvendige attributtene.

- artist;
- album;
- song;
- track;
- comment;
- year;
- genre;
- band;
- composer;
- copyright;
- url;
- publisher.

Eksempel:

from mp3_tagger import MP3File

# Create MP3File instance.
mp3 = MP3File('File_Name.mp3')

# Get all tags.
tags = mp3.get_tags()
print(tags)

Den støtter satt, får, oppdatere og slette attributter av mp3-filer.

Svarte 26/06/2018 kl. 13:50
kilden bruker

stemmer
0

Det første svaret som bruker eyed3 er utdatert så her er en oppdatert versjon av den.

Lese koder fra en mp3-fil:

 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)

Et eksempel fra nettsiden til å endre kodene:

 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

Et problem jeg opplevde mens du prøver å bruke eyed3 for første gang hadde å gjøre med en importfeil libmagic selv om det ble installert. For å fikse dette installere den magiske-bin WHL fra her

Svarte 08/04/2018 kl. 15:52
kilden bruker

stemmer
0

Etter noen innledende undersøkelser jeg trodde songdetails kan passe min bruk sak, men det betyr ikke håndtere .m4b filer. Mutagen gjør. Legg merke til at mens noen har (rimelig) tatt problemet med Mutagen er overflatebehandling av format innfødte nøkler, som varierer fra format til format (TIT2 for mp3, tittel for ogg, \ xa9nam for mp4, Tittel for WMA etc.), mutagen.File ( ) har en (ny?) lett = True parameter som gir EasyMP3 / EasyID3 tags, som har en konsekvent, om enn begrenset, sett med nøkler. Jeg har bare gjort begrenset testing så langt, men de vanlige tastene, som album, artist, albumartist, sjanger, tracknumber, discnumber, etc. er alle tilstede og identisk for .mb4 og MP3-filer ved bruk av lett = Sant, noe som gjør det veldig praktisk for mitt formål.

Svarte 12/07/2015 kl. 23:17
kilden bruker

stemmer
0

Hvis du kan bruke Ironpython, det er TagLibSharp. Den kan brukes fra alle NET språk .

Svarte 26/08/2008 kl. 17:48
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more