पाइथन के साथ एमपी 3 मेटा-डेटा तक पहुंचना

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

0
ro fr bn

15 उत्तर

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

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

0
जोड़ा
दोनों लिंक अब काम नहीं कर रहे हैं। (मुझे पता है कि जवाब 9 साल का है) यदि आप ऑनलाइन पुस्तक "डाइव इन पायथन" की तलाश में हैं, तो यहां वर्तमान लिंक
जोड़ा लेखक Edwin van Mierlo, स्रोत
यह उदाहरण अब थोड़ा पुराना है, दोनों पाइथन संस्करण और आईडी 3 संस्करण के संदर्भ में ...
जोड़ा लेखक Bex, स्रोत

This toolkit may do what you need. I can't say if it's the "best", but really, if it does what you need, that's all that matters, right?

HTH

0
जोड़ा

इसे एक जांचें:

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()
0
जोड़ा

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

0
जोड़ा
Mutagen अच्छा है, हालांकि, कलाकार, शीर्षक शैली इत्यादि पाने के लिए मुझे एक समान तरीका याद आ रहा है - आप विभिन्न कुंजी को जानना समाप्त कर देते हैं, जो प्रारूप निर्भर हैं। mp3 के लिए TIT2 , ogg के लिए title , mp4 के लिए \ xa9nam , WMA इत्यादि के लिए शीर्षक - जो बेकार है।
जोड़ा लेखक Anony-Mousse, स्रोत
जोड़ा लेखक zgoda, स्रोत
code.google.com/p/mutagen - यह भी ध्यान दें कि Mutagen जीपीएल है, ताकि अधिकांश परियोजनाओं के लिए नो-नो नहीं है।
जोड़ा लेखक Ciantic, स्रोत

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

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

अन्य सभी टैग इस तरह से पहुंचे जा सकते हैं और सहेजे जा सकते हैं, जो अधिकांश उद्देश्यों को पूरा करेगा। अधिक जानकारी उत्परिवर्तन ट्यूटोरियल में मिल सकती है।

0
जोड़ा

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

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

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

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

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

0
जोड़ा

आप इसके बाद क्या हैं ID3 मॉड्यूल। यह बहुत आसान है और आपको वही चीज़ देगा जो आपको चाहिए। बस आईडी 3.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
0
जोड़ा
सिर्फ एक नोट। यह मॉड्यूल बहुत पुराना है (2002) और आईडी 3 टैग्स का वी 2 का समर्थन करता है
जोड़ा लेखक Eli Bendersky, स्रोत

यदि आप आयरनपीथन का उपयोग कर सकते हैं, तो टैगलिबर्प है। इसका उपयोग किसी भी .NET भाषा से किया जा सकता है

0
जोड़ा

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

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

एक एमपी 3 फ़ाइल की सामग्री को पढ़ना जिसमें v1 या v2 टैग जानकारी है:

 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()
0
जोड़ा
ध्यान दें कि ये नोट eyed3 के पुराने संस्करण के लिए हैं और अब अच्छी तरह से काम नहीं करेंगे। उदाहरण के लिए, लिंक() फ़ंक्शन चला गया है और सेटर्स के बिना विशेषता अब घोषणात्मक रूप से सेट की गई हैं।
जोड़ा लेखक mlissner, स्रोत
दुर्भाग्यवश, इनमें से अधिकतर आदेश पुराने हैं और यहां तक ​​कि अद्यतन eyed3 सामान्य एमपी 3 फ़ाइलों के लिए त्रुटियां फेंकता है। यह उत्तर में दिखाए गए mutagen class EasyID3 का उपयोग करने के लिए बेहतर है ।
जोड़ा लेखक Chris Redford, स्रोत
@ voyager - diveintopython लिंक मर चुका है।
जोड़ा लेखक Bulwersator, स्रोत
@Ciantic: ID3 टैग अत्यंत सरल कर रहे हैं, यही कारण है कि आप किसी लाइब्रेरी अपने आप को बनाने के लिए और बीएसडी के तहत इसे जारी नहीं करते हैं? इसके अलावा, यह लोगों आप पहली जगह में कुछ भी स्वामित्व नहीं है। यहाँ देखो diveintopython.org/object%5Foriented%5Fframework/index.html
जोड़ा लेखक Esteban Küber, स्रोत
जोड़ा लेखक Esteban Küber, स्रोत
आईएचडी 3 भी <बी> जीपीएल है ... इसलिए यदि आप मेरे प्रोग्राम पर इसका इस्तेमाल करने की योजना बना रहे हैं तो आपको अपने कार्यक्रम को एक मुफ्त कार्यक्रम के रूप में भी जारी करना होगा ... इन लोगों के साथ इसे कम करें, वे क्यों नहीं कर सकते एलजीपीएल के तहत रिलीज?
जोड़ा लेखक Ciantic, स्रोत
@ voyager, ID3v1 टैग सरल हैं, ID3v2 टैग नरक के रूप में जटिल हैं ... और अब मैंने pytagger के लिए बीएसडी रैपर बनाया है github.com/Ciantic/songdetails मैंने इसे अभी तक जारी नहीं किया है, लेकिन यह काम करता है।
जोड़ा लेखक Ciantic, स्रोत
नए संस्करण में, आयात eyed3 (लोअरकेस डी) का उपयोग करें।
जोड़ा लेखक Mark W, स्रोत

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

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

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

0
जोड़ा

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

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

0
जोड़ा

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

0
जोड़ा

सबसे आसान तरीका गीत विवरण है ..

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

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 को जोड़ना न भूलें।

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

पूर्व।

import glob
songs = glob.glob('*')  //script should be in directory of songs.
for song in songs:
   //do the above work.
0
जोड़ा

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

An issue I encountered while trying to use eyed3 for the first time had to do with an import error of libmagic even though it was installed. To fix this install the magic-bin whl from here

0
जोड़ा

आंख 3, पायटाग्लिब और आईडी 3 मॉड्यूल के लिए सरल <कोड> पीआईपी इंस्टॉल मार्ग की कोशिश करने के बाद, मुझे पता चला कि यह चौथा विकल्प काम करने वाला एकमात्र विकल्प था। शेष में C ++ या कुछ जादू या कुछ अन्य लाइब्रेरी में अनुपलब्ध निर्भरताओं के साथ आयात त्रुटियां थीं जो pip चूक गईं। तो आईडी 3 टैग (सभी संस्करणों) के मूल पढ़ने के लिए इसके साथ जाएं:

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

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

0
जोड़ा