अजगर के साथ एमपी 3 मेटाडाटा एक्सेस करना [बंद]


122

मैं पायथन में एमपी 3 मेटाडेटा कैसे प्राप्त कर सकता हूं?

जवाबों:


106

मैंने दूसरे दिन बहुत सफलता के साथ eyeD3 का उपयोग किया । मैंने पाया कि यह ID3 टैग में कलाकृति को जोड़ सकता है जो अन्य मॉड्यूल जिन्हें मैंने देखा था, वे नहीं कर सकते थे। आपको पाइप का उपयोग करके इंस्टॉल करना होगा या टार डाउनलोड करना होगा और python setup.py installस्रोत फ़ोल्डर से निष्पादित करना होगा ।

वेबसाइट से प्रासंगिक उदाहरण नीचे हैं।

V1 या v2 टैग जानकारी युक्त एमपी 3 फ़ाइल की सामग्री को पढ़ना:

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

एक एमपी 3 फ़ाइल (ट्रैक की लंबाई, बिटरेट, आदि) पढ़ें और इसे टैग करें:

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
eyeD3 भी GPL है ... तो अगर मेरी तरह आप इसे अपने प्रोग्राम पर उपयोग करने की योजना बनाते हैं, तो आपको अपने प्रोग्राम को एक फ्री प्रोग्राम के रूप में भी जारी करना होगा ... इसे इन लोगों के साथ साझा करें, वे LGPL के तहत रिलीज़ क्यों नहीं कर सकते?
Ciantic

9
@Ciantic: ID3 टैग बेहद सरल हैं, आप खुद को लाइब्रेरी क्यों नहीं बनाते हैं और इसे बीएसडी के तहत जारी करते हैं? इसके अलावा, यह लोग आपको पहली जगह में कुछ भी नहीं देते हैं। यहाँ देखें diveintopython.org/object%5Foriented%5Fframework/index.html
Esteban Küber

2
@voyager, ID3v1 टैग सरल हैं, ID3v2 टैग नरक के रूप में जटिल हैं ... और अब मैंने pytagger github.com/Ciantic/songdetails के लिए बीएसडी आवरण बना लिया है जिसे मैंने अभी तक जारी नहीं किया है, लेकिन यह काम करता है।
Ciantic

5
नए संस्करण में, उपयोग import eyed3(लोअरकेस डी)।
जेक जेड

4
ध्यान दें कि ये नोट eyed3 के पुराने संस्करण के लिए हैं और अब और अच्छे से काम नहीं करेंगे। उदाहरण के लिए, लिंक () फ़ंक्शन दूर हो गया है और विशेषताओं को बिना सेटल किए, अब घोषित रूप से सेट किया गया है।
mlissner

37

मैंने पहले मीडिया फ़ाइलों में टैग संपादित करने के लिए म्यूटेन का उपयोग किया है । म्यूटेजन के बारे में अच्छी बात यह है कि यह अन्य स्वरूपों को संभाल सकता है, जैसे कि mp4, FLAC आदि। मैंने इस API का उपयोग करते हुए कई स्क्रिप्ट लिखी हैं।


2
code.google.com/p/mutagen - यह भी ध्यान दें कि Mutagen GPL है, इसलिए यह अधिकांश परियोजनाओं के लिए नहीं है।
Ciantic

3
Mutagen अच्छा है, हालांकि मुझे कलाकार, शीर्षक शैली आदि को प्राप्त करने के लिए एक समान तरीका याद आ रहा है - आप अंत में विभिन्न कुंजियों को जानते हैं, जो प्रारूप पर निर्भर हैं। TIT2एमपी 3 के लिए, titleओग के लिए, \xa9nammp4 के लिए, Titleअर्थोपाय अग्रिम के लिए आदि - कि बेकार है।
QUIT - Anony-Mousse

20

इसके साथ एक समस्या eyed3यह है कि यह NotImplementedError("Unable to write ID3 v2.2")आम एमपी 3 फ़ाइलों के लिए फेंक देगा ।

मेरे अनुभव में, 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()

अन्य सभी टैग इस तरह से एक्सेस किए जा सकते हैं और सहेजे जा सकते हैं, जो अधिकांश उद्देश्यों को पूरा करेगा। अधिक जानकारी Mutagen Tutorial में देखी जा सकती है ।


13

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

12
सिर्फ एक नोट। यह मॉड्यूल बहुत पुराना है (2002) और ID3 टैग्स के V2 का समर्थन नहीं है
एली बेन्द्स्की


7

आप लोगों को बस अतिरिक्त जानकारी:

PythonInMusic के पेज में "एमपी 3 सामान और मेटाडेटा संपादकों" अनुभाग पर एक नज़र डालें


6

डाइव इनटू पायथन पुस्तक का एक सरल उदाहरण मेरे लिए ठीक काम करता है, यह डाउनलोड लिंक है, इसका उदाहरण फ़ाइलिनफोरो है। पता नहीं कि यह सबसे अच्छा है, लेकिन यह बुनियादी काम कर सकता है।

पूरी किताब यहां ऑनलाइन उपलब्ध है


3
यह उदाहरण अब थोड़ा पुराना हो चुका है, अजगर संस्करण के संदर्भ में और ID3 संस्करण के संदर्भ में ...
Bex

दोनों लिंक अब काम नहीं कर रहे हैं। (मुझे पता है कि उत्तर 9 साल पुराना है) यदि आप ऑनलाइन पुस्तक "डाइव इन पाइथन" की तलाश कर रहे हैं, तो यहां वर्तमान लिंक है
एडविन वैन मिर्लो

वह लिंक भी अब काम नहीं कर रहा है। सबसे अच्छा मैं जल्दी से अब गूगल कर सकता है github.com/diveintomark/diveintopython3
tripleee

6

मैंने उपरोक्त उत्तरों को देखा और पाया कि वे जीपीएल के साथ लाइसेंस की समस्याओं के कारण मेरी परियोजना के लिए अच्छे नहीं हैं।

और मुझे यह पता चला: PyID3Lib , जबकि उस विशेष अजगर बंधन की रिलीज़ की तारीख पुरानी है, यह ID3Lib का उपयोग करता है , जो स्वयं अप टू डेट है।

उल्लेखनीय है कि दोनों LGPL हैं , और जाने के लिए अच्छे हैं।


4

सबसे आसान विधि है गीतकार ।।

डेटा पढ़ने के लिए

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

जब तक आप चीनी भाषा नहीं जानते हैं, तब तक नाम से पहले यू जोड़ना न भूलें ।

आप अजगर ग्लोब मॉड्यूल का उपयोग करके थोक में पढ़ और संपादित कर सकते हैं

पूर्व।

import glob
songs = glob.glob('*')   // script should be in directory of songs.
for song in songs:
    // do the above work.

4

pip installEyeD3, pytaglib, और ID3 मॉड्यूल के लिए सरल मार्ग की कोशिश करने के बाद , मुझे यह सलाह मिली कि यह चौथा विकल्प काम करने वाला एकमात्र था। बाकी सी + + या कुछ जादू या कुछ अन्य पुस्तकालय में गुम निर्भरता के साथ त्रुटि आयात 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

विज्ञापन के रूप में यह छोटा और आत्म-निहित था।


1
टिनिअटैग के लिए नया संस्करण: pypi.org/project/tinytag
डेनीस टार्गैरन

2

पहला उत्तर जो eyed3 का उपयोग करता है, वह पुराना है, इसलिए यहां इसका अपडेट किया गया संस्करण है।

एक एमपी 3 फ़ाइल से टैग पढ़ना:

 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 का उपयोग करने का प्रयास करते समय एक समस्या का मुझे सामना करना पड़ा था, जबकि इसे स्थापित किए जाने के बावजूद यह lib lib की त्रुटि के साथ था। इसे ठीक करने के लिए यहां से मैजिक-बिन व्हेल इंस्टॉल करें


2

मैं एमपी-टैगर का सुझाव दूंगा । इसके बारे में सबसे अच्छी बात यह है कि यह एमआईटी लाइसेंस के तहत वितरित किया जाता है और सभी आवश्यक विशेषताओं का समर्थन करता है।

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

यह एमपी 3 फ़ाइलों के सेट, प्राप्त, अद्यतन और हटाने का समर्थन करता है।


1

यह ठीक उसी तरह निर्भर कर सकता है जैसे आप मेटाडेटा पढ़ने के अलावा क्या करना चाहते हैं। यदि यह केवल बिटरेट / नाम आदि है, जिसकी आपको आवश्यकता है, और कुछ नहीं, तो कुछ हल्का शायद सबसे अच्छा है।

यदि आप mp3 अतीत में हेरफेर कर रहे हैं कि PyMedia उपयुक्त हो सकता है।

काफी कुछ हैं, जो भी आप प्राप्त करते हैं, सुनिश्चित करें और बहुत सारे नमूना मीडिया पर इसका परीक्षण करें। विशेष रूप से ID3 टैग के कुछ अलग संस्करण हैं, इसलिए सुनिश्चित करें कि यह बहुत पुराना नहीं है।

व्यक्तिगत रूप से मैंने भाग्य के साथ इस छोटे MP3Info वर्ग का उपयोग किया है। हालांकि यह काफी पुराना है।

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


0

कुछ प्रारंभिक शोध के बाद मैंने सोचा कि गीतडेट मेरे उपयोग के मामले में फिट हो सकते हैं, लेकिन यह .m4b फ़ाइलों को संभाल नहीं पाता है। Mutagen करता है। ध्यान दें कि जबकि कुछ (यथोचित) ने मुजेगेन के स्वरूप-मूल कुंजियों के सरफेसिंग के मुद्दे को लिया है, जो प्रारूप से प्रारूप (एमपी 3 के लिए TIT2, Ogg के लिए शीर्षक, mp4 के लिए \ xa9nam, WMA आदि के लिए शीर्षक), mutagen.File ( ) के पास एक (नया?) आसान = सच्चा पैरामीटर है जो ईज़ीएमपी 3 / ईज़ीआईडी ​​3 टैग प्रदान करता है, जिसमें एक सुसंगत, यद्यपि सीमित, कुंजी का सेट है। मैंने अब तक केवल सीमित परीक्षण किया है, लेकिन सामान्य कुंजियाँ, जैसे एल्बम, कलाकार, एल्बमकार्टिस्ट, शैली, ट्रैकनंबर, डिस्कनंबर, आदि .mb4 और .mp3 फ़ाइलों के लिए सभी मौजूद और समान हैं। मेरे उद्देश्यों के लिए बहुत सुविधाजनक है।


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

क्या आप इसके लिए विवरण और विवरण प्रदान कर सकते हैं?
नेल्स

0

मैंने टिनिटैग 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>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.