Πρόσβαση σε mp3 μετα-δεδομένων με την Python

ψήφοι
98

Ποιος είναι ο καλύτερος τρόπος για να ανακτήσετε mp3 μεταδεδομένα σε πύθωνα; Έχω δει ένα ζευγάρι πλαισίων εκεί έξω, αλλά είμαι σίγουρος για το ποια θα ήταν η καλύτερη για να χρησιμοποιήσετε .... Οποιαδήποτε ιδέα;

Δημοσιεύθηκε 12/08/2008 στις 16:16
πηγή χρήστη
Σε άλλες γλώσσες...                            


18 απαντήσεις

ψήφοι
1

Αυτή η εργαλειοθήκη μπορεί να κάνει ό, τι χρειάζεστε. Δεν μπορώ να πω αν είναι το «καλύτερο», αλλά πραγματικά, αν το κάνει ό, τι χρειάζεστε, αυτό είναι που μετράει, έτσι δεν είναι;

HTH

Απαντήθηκε 12/08/2008 στις 16:32
πηγή χρήστη

ψήφοι
7

Ένα απλό παράδειγμα από το βιβλίο Dive Into Python λειτουργεί εντάξει για μένα, αυτό είναι το σύνδεσμο λήψης, το παράδειγμα είναι fileinfo.py. Δεν ξέρω αν είναι το καλύτερο, αλλά μπορεί να κάνει τη βασική δουλειά.

Ολόκληρο το βιβλίο είναι διαθέσιμο στο διαδίκτυο εδώ .

Απαντήθηκε 12/08/2008 στις 16:37
πηγή χρήστη

ψήφοι
1

Αυτό μπορεί να εξαρτάται από το τι ακριβώς θέλετε να κάνετε εκτός από την ανάγνωση των μεταδεδομένων. Αν είναι απλά το bitrate / όνομα κλπ που χρειάζεστε, και τίποτα άλλο, κάτι ελαφρύ είναι μάλλον η καλύτερη.

Αν το χειρισμό του mp3 παρελθόν που PyMedia μπορεί να είναι κατάλληλο.

Υπάρχουν αρκετά, ό, τι παίρνουν, βεβαιωθείτε ότι και να ελέγξετε έξω για την αφθονία των μέσων μαζικής ενημέρωσης δείγματος. Υπάρχουν μερικές διαφορετικές εκδόσεις των ετικετών ID3 ιδίως, οπότε βεβαιωθείτε ότι δεν είναι πολύ ξεπερασμένη.

Προσωπικά έχω χρησιμοποιήσει αυτό το μικρής κατηγορίας MP3Info με την τύχη. Είναι αρκετά παλιά όμως.

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

Απαντήθηκε 12/08/2008 στις 16:37
πηγή χρήστη

ψήφοι
12

Τι είστε μετά από το ID3 μονάδα. Είναι πολύ απλό και θα σας δώσει ακριβώς αυτό που χρειάζεστε. Απλά αντιγράψτε το αρχείο ID3.py στην τοποθεσία πακέτα του καταλόγου σας και θα είστε σε θέση να κάνει κάτι σαν το παρακάτω:

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
Απαντήθηκε 13/08/2008 στις 01:44
πηγή χρήστη

ψήφοι
33

Έχω χρησιμοποιήσει μεταλλαξιογόνο να επεξεργαστείτε τις ετικέτες στα αρχεία πολυμέσων πριν. Το θετικό σχετικά με μεταλλαξιογόνο είναι ότι μπορεί να χειριστεί άλλες μορφές, όπως MP4, FLAC, κλπ έχω γράψει αρκετά σενάρια με μεγάλη επιτυχία με τη χρήση αυτού του API.

Απαντήθηκε 14/08/2008 στις 10:46
πηγή χρήστη

ψήφοι
0

Εάν μπορείτε να χρησιμοποιήσετε IronPython, υπάρχει TagLibSharp. Μπορεί να χρησιμοποιηθεί από οποιαδήποτε γλώσσα ΝΕΤ .

Απαντήθηκε 26/08/2008 στις 18:48
πηγή χρήστη

ψήφοι
91

Θα χρησιμοποιηθεί eyed3 τις προάλλες με μεγάλη επιτυχία. Βρήκα ότι θα μπορούσε να προσθέσει το έργο τέχνης στην ετικέτα ID3 που οι άλλες ενότητες κοίταξα δεν θα μπορούσε. Θα πρέπει να κατεβάσετε την πίσσα και να εκτελέσει python setup.py installαπό το φάκελο προέλευσης.

Σχετικά παραδείγματα από την ιστοσελίδα είναι κάτω.

Διαβάζοντας τα περιεχόμενα ενός αρχείου mp3 που περιέχουν είτε v1 ή v2 tag πληροφορίες:

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

Διαβάστε ένα αρχείο mp3 (μήκος διαδρομής, bitrate, κλπ) και η πρόσβαση είναι tag:

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

Ειδικές εκδόσεις ετικέτα μπορεί να επιλέξει:

 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.

Ή μπορείτε να επαναλάβει κατά τη διάρκεια των πρώτων πλαισίων:

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

Μόλις μια ετικέτα συνδεδεμένη με ένα αρχείο μπορεί να τροποποιηθεί και να αποθηκευτούν:

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

Εάν η ετικέτα που συνδέεται με ήταν v2 και θέλετε να το αποθηκεύσετε ως v1:

 tag.update(eyeD3.ID3_V1_1)

Διαβάστε σε μια ετικέτα και αφαιρέστε το από το αρχείο:

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

Προσθέστε μια νέα ετικέτα:

 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()
Απαντήθηκε 19/09/2008 στις 15:30
πηγή χρήστη

ψήφοι
5

Κοίταξα τις παραπάνω απαντήσεις και διαπίστωσε ότι δεν είναι καλό για το έργο μου λόγω των προβλημάτων αδειοδότησης με την GPL.

Και ανακάλυψα αυτό: PyID3Lib , ενώ η συγκεκριμένη πύθωνα δεσμευτική ημερομηνία κυκλοφορίας είναι παλιό, χρησιμοποιεί το ID3Lib , η οποία είναι μέχρι σήμερα.

Αξιοσημείωτες να αναφέρω είναι ότι και οι δύο είναι LGPL , και είναι καλό να πάει.

Απαντήθηκε 20/12/2009 στις 20:32
πηγή χρήστη

ψήφοι
8

ελέγξτε αυτό έξω:

https://github.com/Ciantic/songdetails

Παράδειγμα Χρήσης:

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

Αποθήκευση αλλαγές:

>>> import songdetails
>>> song = songdetails.scan("data/commit.mp3")
>>> song.artist = "Great artist"
>>> song.save()
Απαντήθηκε 30/12/2010 στις 02:40
πηγή χρήστη

ψήφοι
5

Απλά πρόσθετες πληροφορίες για να σας παιδιά:

ρίξτε μια ματιά στην ενότητα «πράγματα MP3 και εκδότες Μεταδεδομένα» στην σελίδα της PythonInMusic .

Απαντήθηκε 08/07/2011 στις 09:24
πηγή χρήστη

ψήφοι
0

Μετά από κάποια αρχική έρευνα σκέφτηκα songdetails μπορεί να χωρέσει περίπτωση χρήσης μου, αλλά δεν χειρίζεται .m4b αρχεία. Μεταλλαξιογόνο κάνει. Σημειώστε ότι ενώ ορισμένα έχουν (λογικά) λαμβάνεται θέμα με επιφανειών Μεταλλαξιογόνα των κλειδιών μορφή ιθαγενών, που ποικίλλουν από σχήμα σε σχήμα (TIT2 για mp3, τίτλος για ogg, \ xa9nam για mp4, τίτλος για WMA, κλπ), mutagen.File ( ) έχει μια (νέα;) εύκολη = True παράμετρος που παρέχει EasyMP3 / EasyID3 ετικέτες, οι οποίες έχουν μια σταθερή, αν και περιορισμένη, σετ κλειδιών. Έχω κάνει μόνο περιορισμένες δοκιμές μέχρι τώρα, αλλά τα κοινά κλειδιά, όπως το άλμπουμ, καλλιτέχνη, albumartist, είδος, αριθμός του κομματιού, discnumber, κλπ είναι όλοι παρόντες και ίδια για .mb4 και .mp3 αρχεία, όταν χρησιμοποιεί το εύκολο = True, καθιστώντας πολύ βολικό για τους σκοπούς μου.

Απαντήθηκε 12/07/2015 στις 23:17
πηγή χρήστη

ψήφοι
11

Ένα πρόβλημα με eyed3είναι ότι θα ρίξει NotImplementedError("Unable to write ID3 v2.2")για τα κοινά αρχεία MP3.

Σύμφωνα με την εμπειρία μου, η mutagenτάξη EasyID3λειτουργεί πιο αξιόπιστα. Παράδειγμα:

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

Όλες οι άλλες ετικέτες μπορούν να προσεγγιστούν με αυτόν τον τρόπο και αποθηκεύεται, το οποίο θα εξυπηρετεί τους περισσότερους σκοπούς. Περισσότερες πληροφορίες μπορείτε να βρείτε στην Μεταλλαξιγόνοι Tutorial .

Απαντήθηκε 24/01/2016 στις 00:07
πηγή χρήστη

ψήφοι
4

ευκολότερος τρόπος είναι songdetails ..

για τα δεδομένα ανάγνωσης

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

ομοίως για επεξεργασία

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

Μην ξεχάσετε να προσθέσετε u πριν από το όνομα, μέχρι να γνωρίζετε κινεζική γλώσσα.

u μπορεί να διαβάσει και να επεξεργαστείτε μαζικά χρήση της ενότητας python glob

πρώην.

import glob
songs = glob.glob('*')   // script should be in directory of songs.
for song in songs:
    // do the above work.
Απαντήθηκε 11/08/2016 στις 09:05
πηγή χρήστη

ψήφοι
0

Η πρώτη απάντηση που χρησιμοποιεί eyed3 είναι ξεπερασμένη τόσο εδώ είναι μια ενημερωμένη έκδοση του.

Διαβάζοντας τις ετικέτες από ένα αρχείο 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)

Ένα παράδειγμα από την ιστοσελίδα για να τροποποιήσετε τις ετικέτες:

 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

Ένα θέμα που αντιμετώπισε, ενώ προσπαθεί να χρησιμοποιήσει eyed3 για πρώτη φορά είχε να κάνει με ένα λάθος κατά την εισαγωγή του libmagic αν και είχε εγκατασταθεί. Για να διορθώσετε αυτό το εγκαταστήσετε τη μαγεία-bin WHL από εδώ

Απαντήθηκε 08/04/2018 στις 15:52
πηγή χρήστη

ψήφοι
0

Μετά από προσπάθεια την απλή pip installδιαδρομή για μονάδες eyed3, pytaglib, και ID3 προτείνεται εδώ, βρήκα αυτή η τέταρτη επιλογή ήταν η μόνη που λειτουργεί. Οι υπόλοιποι είχαν σφάλματα εισαγωγής με τα ελλείποντα εξαρτήσεις σε C ++ ή κάτι μαγικό ή κάποια άλλη βιβλιοθήκη που pipέχασε. Έτσι πάει με αυτό για τη βασική ανάγνωση των ετικετών ID3 (όλες οι εκδόσεις):

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

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

Κατάλογος των πιθανών χαρακτηριστικών που μπορείτε να πάρετε με 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

Ήταν μικρό και αυτοδύναμη, όπως διαφημίζεται.

Απαντήθηκε 16/04/2018 στις 01:34
πηγή χρήστη

ψήφοι
0

Θα ήθελα να προτείνω mp3-tagger . Καλύτερο πράγμα για αυτό είναι ότι διανέμεται υπό άδεια χρήσης του MIT και υποστηρίζει όλα τα απαιτούμενα χαρακτηριστικά.

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

Παράδειγμα:

from mp3_tagger import MP3File

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

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

Υποστηρίζει οριστεί, να πάρει, ενημέρωση και διαγραφή χαρακτηριστικά των αρχείων mp3.

Απαντήθηκε 26/06/2018 στις 13:50
πηγή χρήστη

ψήφοι
0

χρησιμοποιώντας 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
Απαντήθηκε 07/02/2020 στις 02:51
πηγή χρήστη

ψήφοι
0

Θα χρησιμοποιηθεί Tinytag 1.3.1 γιατί

  1. Είναι ενεργά υποστήριξε:
1.3.0 (2020-03-09):
added option to ignore encoding errors ignore_errors #73
Improved text decoding for many malformed files
  1. Υποστηρίζει τις μεγάλες μορφές:
MP3 (ID3 v1, v1.1, v2.2, v2.3+)
Wave/RIFF
OGG
OPUS
FLAC
WMA
MP4/M4A/M4B
  1. Ο κώδικας εργαστεί σε λίγα λεπτά της ανάπτυξης.
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>
Απαντήθηκε 11/03/2020 στις 00:02
πηγή χρήστη

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