2009-03-30 25 views
13

के बीच रूपांतरण को सारणीबद्ध करना मैं पाइथन या बैश में एक संसाधन की तलाश में हूं जो इसे लेना आसान बनाता है, उदाहरण के लिए, एमपी 3 फ़ाइल एक्स और एम 4 ए फ़ाइल वाई और कहें "कॉपी एक्स के टैग वाई के लिए "।आईडी 3 टैग, एम 4 ए टैग, फ्लैक टैग

पाइथन का "उत्परिवर्तन" मॉड्यूल सामान्य रूप से टैग्स को मैन्युलेट करने के लिए बहुत अच्छा है, लेकिन "कलाकार फ़ील्ड" की कोई सार अवधारणा नहीं है जो विभिन्न प्रकार के टैग फैलती है; मुझे एक पुस्तकालय चाहिए जो सभी विचित्र बिट्स को संभालता है और फ़ील्डनाम समकक्ष जानता है। चीजों के लिए सभी टैग सिस्टम व्यक्त नहीं कर सकते हैं, मैं खो गया जानकारी या सर्वोत्तम अनुमान के साथ ठीक हूं।

(केस का उपयोग करें: मैं एमपी 3 को लापरवाह फाइलों को एन्कोड करता हूं, फिर सुनने के लिए एमपी 3 का उपयोग करता हूं। हर महीने या तो, मैं 'मास्टर' लापरवाह फाइलों को अपडेट करने में सक्षम होना चाहता हूं, जो भी टैग परिवर्तन मैंने किया है एमपी 3। मैं प्रारूपों के बीच कार्यान्वयन मतभेदों पर अपने पैर की उंगलियों को दबाकर थक गया हूं।)

+0

आप हमेशा ऐसे खिलाड़ी का उपयोग कर सकते हैं जो पहले से ही ऐसी चीजें आसानी से करता है, जैसे foobar2000। इसकी 'कॉपी टैग' सुविधा बिल्कुल वैसा ही है, प्रारूप के बावजूद। – tzot

उत्तर

8

मुझे इस सटीक चीज़ की आवश्यकता थी, और मुझे भी यह एहसास हुआ कि म्यूटेगन इस तरह की चीज करने के लिए एक दूर पर्याप्त अमूर्त नहीं है। सौभाग्य से, उत्परिवर्तन के लेखकों को इसे अपने मीडिया प्लेयर QuodLibet के लिए आवश्यक था।

मैं इसे कैसे उपयोग करने के लिए पता लगाने के लिए QuodLibet स्रोत के माध्यम से खुदाई करने के लिए किया था, लेकिन एक बार मैं यह समझ, मैं एक उपयोगिता sequitur कहा जाता है जो ExFalso (QuodLibet की टैगिंग के लिए एक कमांड लाइन बराबर होने का इरादा है लिखा था घटक)। यह इस अमूर्त तंत्र का उपयोग करता है और कुछ अतिरिक्त अमूर्तता और कार्यक्षमता प्रदान करता है।

यदि आप स्रोत को देखना चाहते हैं, here's a link to the latest tarball। पैकेज वास्तव में तीन कमांड लाइन स्क्रिप्ट्स का एक सेट है और क्यूएल के साथ इंटरफेसिंग के लिए एक मॉड्यूल है। आप पूरी बात को स्थापित करना चाहते हैं, तो आप उपयोग कर सकते हैं:

easy_install QLCLI 

एक बात ध्यान में के बारे में exfalso/quodlibet (और फलस्वरूप sequitur) रखने के लिए कि वे वास्तव में ठीक से ऑडियो मेटाडाटा को लागू है, जिसका अर्थ है कि सभी टैग समर्थन एकाधिक मान (जब तक फ़ाइल प्रकार इसे प्रतिबंधित नहीं करता है, जो कि बहुत से नहीं होते हैं)।

print qllib.AudioFile('foo.mp3')['artist'] 

विल नहीं उत्पादन एक एकल स्ट्रिंग उत्पादन की तरह स्ट्रिंग की एक सूची है, लेकिन जाएगा:

[u'The First Artist', u'The Second Artist'] 

जिस तरह से आप इसका इस्तेमाल कर सकते हैं टैग कॉपी करने के लिए की तरह कुछ हो जाएगा तो, की तरह कुछ कर रही:

import os.path 
import qllib # this is the module that comes with QLCLI 

def update_tags(mp3_fn, flac_fn): 
    mp3 = qllib.AudioFile(mp3_fn) 
    flac = qllib.AudioFile(flac_fn) 
    # you can iterate over the tag names 
    # they will be the same for all file types 
    for tag_name in mp3: 
     flac[tag_name] = mp3[tag_name] 
    flac.write() 

mp3_filenames = ['foo.mp3', 'bar.mp3', 'baz.mp3'] 

for mp3_fn in mp3_filenames: 
    flac_fn = os.path.splitext(mp3_fn)[0] + '.flac' 
    if os.path.getmtime(mp3_fn) != os.path.getmtime(flac_fn): 
     update_tags(mp3_fn, flac_fn) 
+0

जेरेमी कैंट्रेल की क्वाड-क्ली लाइब्रेरी अब गीथब पर उपलब्ध है: https://github.com/jmcantrell/quodlibet-cli – ade

0

आप प्रत्येक प्रारूप में प्रत्येक टैग नाम के मैपिंग के साथ "अमूर्त टैग" प्रकार में एक सरल ऐप लिख सकते हैं, और उसके बाद एक से दूसरे में कनवर्ट करना आसान है। आपको सभी उपलब्ध प्रकारों को भी जानने की ज़रूरत नहीं है - केवल वे लोग जिन्हें आप रुचि रखते हैं।

मुझे सप्ताहांत-परियोजना प्रकार के समय निवेश की तरह लगता है, संभवतः कम। मज़े करो, और मैं आपके कार्यान्वयन पर और यहां तक ​​कि इसका उपयोग करने पर भी ध्यान नहीं रखूंगा - अगर आप इसे निश्चित रूप से जारी नहीं करेंगे :-)।

0

टैगपी भी है, जो अच्छी तरह से काम करता प्रतीत होता है।

2

यहां कुछ उदाहरण कोड है, एक स्क्रिप्ट जिसे मैंने फ़ाइलों के बीच टैग कॉपी करने के लिए लिखा था, जो क्वाड लिबेट के संगीत प्रारूप वर्गों (म्यूटेगन के नहीं!) का उपयोग कर फाइलों की प्रतिलिपि बनाते हैं। चलाने के लिए, बस copytags.py src1 dest1 src2 dest2 src3 dest3 करें, और यह टैग को sec1 से dest1 में कॉपी करेगा (किसी भी मौजूदा टैग को dest1 पर हटाए जाने के बाद!), और इसी तरह।ब्लैकलिस्ट पर ध्यान दें, जिसे आपको अपनी खुद की प्राथमिकता पर ट्विक करना चाहिए। ब्लैकलिस्ट न केवल कॉपी किए जाने से कुछ टैग को रोक देगा, इससे उन्हें गंतव्य फ़ाइल में क्लॉब्ड होने से भी रोका जाएगा।

स्पष्ट होने के लिए, क्वाड लिबेट का प्रारूप-अज्ञेय टैगिंग उत्परिवर्तन की विशेषता नहीं है; इसे उत्परिवर्तन के शीर्ष पर लागू किया गया है। इसलिए यदि आप प्रारूप-अज्ञेय टैगिंग चाहते हैं, तो mutagen.File की बजाय अपनी फ़ाइलों को खोलने के लिए आपको quodlibet.formats.MusicFile का उपयोग करने की आवश्यकता है।

कोड अब यहां पाया जा सकता: https://github.com/DarwinAwardWinner/copytags

तुम भी एक ही समय में ट्रांसकोडिंग करना चाहते हैं, इस का उपयोग करें: https://github.com/DarwinAwardWinner/transfercoder

मेरे लिए एक महत्वपूर्ण विस्तार किया गया है कि जेल में क़ैद Libet के संगीत प्रारूप कक्षाएं उम्मीद क्यूएल की कॉन्फ़िगरेशन लोड होने के लिए, इसलिए config.init लाइन स्क्रिप्ट में। इसके बिना, फ़ाइलों को लोड या सहेजते समय मुझे सभी प्रकार की त्रुटियां मिलती हैं।

मैंने "मानक" टैग के साथ-साथ मनमाने ढंग से टैग के साथ flac, ogg, और mp3 के बीच प्रतिलिपि बनाने के लिए इस स्क्रिप्ट का परीक्षण किया है। यह अब तक पूरी तरह से काम किया है।

कारण के कारण के रूप में मैंने QLLib का उपयोग नहीं किया, यह मेरे लिए काम नहीं करता था। मुझे संदेह है कि यह वही कॉन्फ़िगर-संबंधित त्रुटियां प्राप्त कर रहा था जैसा कि मैं था, लेकिन चुपचाप उन्हें अनदेखा कर रहा था और टैग लिखने में असफल रहा।

+0

और, मर्फी के कानून द्वारा भविष्यवाणी के अनुसार, क्यूएल लिब ने इस स्क्रिप्ट को लिखने के तुरंत बाद मेरे लिए पूरी तरह से काम करना शुरू कर दिया । –

+0

यह मेरे द्वारा किए गए कई समाधानों में से मेरे लिए काम किया। धन्यवाद! – e40

2

मेरे पास एक बैश स्क्रिप्ट है जो ठीक है, atwat-tagger। यह flac, एमपी 3, ogg और mp4 फ़ाइलों का समर्थन करता है।

usage: `atwat-tagger.sh inputfile.mp3 outputfile.ogg` 

मुझे पता है कि आपकी परियोजना पहले से ही समाप्त हो चुकी है, लेकिन कोई भी जो इस पृष्ठ को खोज इंजन के माध्यम से पाता है उसे उपयोगी लगेगा।

+0

स्टैक ओवरव्लो में आपका स्वागत है! – bgw