2008-08-12 21 views
95

के साथ एमपी 3 मेटा-डेटा एक्सेस करना पायथन में एमपी 3 मेटाडेटा को पुनर्प्राप्त करने का सबसे अच्छा तरीका क्या है? मैंने वहां कुछ ढांचे को देखा है, लेकिन मुझे यकीन नहीं है कि किसके लिए उपयोग करना सबसे अच्छा होगा .... कोई विचार?पायथन

उत्तर

1

This toolkit आपको जो चाहिए वह कर सकता है। मैं यह नहीं कह सकता कि यह "सर्वश्रेष्ठ" है, लेकिन वास्तव में, यदि आपको वह चाहिए जो आपको चाहिए, तो यह सब मायने रखता है, है ना?

HTH

7

पुस्तक गोता में अजगर मेरे लिए ठीक काम करता है से एक साधारण उदाहरण, this डाउनलोड लिंक है, उदाहरण के fileinfo.py है। पता नहीं है कि यह सबसे अच्छा है, लेकिन यह मूल नौकरी कर सकता है।

संपूर्ण पुस्तक ऑनलाइन here उपलब्ध है।

+2

कि उदाहरण के एक सा पुराना है, दोनों अजगर संस्करण के संदर्भ में और ID3 संस्करण के मामले में ... – Bex

+0

दोनों लिंक अब काम कर रहे हैं। (मुझे पता है कि जवाब 9 साल का है) यदि आप ऑनलाइन पुस्तक "डाइव इन पायथन" की तलाश में हैं, तो यहां वर्तमान [लिंक] (http://www.diveintopython.net/) –

1

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

यदि आप एमपी 3 को पीछे छोड़ रहे हैं कि PyMedia उपयुक्त हो सकता है।

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

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

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

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 
+11

बस एक नोट है। यह मॉड्यूल बहुत पुराना है (2002) और आईडी 3 टैग –

33

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

+0

का वी 2 का समर्थन करता है http://code.google.com/p/quodlibet/ – zgoda

+1

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

+1

उत्परिवर्तन अच्छा है, हालांकि मुझे कलाकार, शीर्षक शैली इत्यादि पाने के लिए एक समान तरीका याद आ रहा है - आप अलग-अलग चाबियों को जानना चाहते हैं, जो प्रारूप निर्भर हैं। एमपी 3 के लिए 'टीआईटी 2 ', ओजी के लिए' शीर्षक ', एमपी 4 के लिए' xa9nam', डब्लूएमए आदि के लिए' शीर्षक '- जो बेकार है। –

88

मैंने eyeD3 का उपयोग बहुत सफलता के साथ किया था। मैंने पाया कि यह आईडी 3 टैग में आर्टवर्क जोड़ सकता है जो मैंने देखा कि अन्य मॉड्यूल नहीं कर सका। आपको स्रोत फ़ोल्डर से टैर डाउनलोड करना होगा और 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() 
+14

आईएचडी 3 भी ** जीपीएल ** है ... इसलिए यदि मेरे जैसे आप इसे अपने कार्यक्रम पर इस्तेमाल करने की योजना बना रहे हैं तो आपको अपने कार्यक्रम को एक मुफ्त कार्यक्रम के रूप में भी जारी करना होगा ... इन लोगों के साथ इसे कम करें, वे क्यों नहीं जारी कर सकते LGPL? – Ciantic

+7

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

+2

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

5

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

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

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

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

तुम लोगों को बस में अतिरिक्त जानकारी:

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

0

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

11

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

मेरे अनुभव में, 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 में मिल सकती है।

3

सबसे आसान तरीका 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() 

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

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

पूर्व कर सकते हैं।

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