2012-12-27 16 views
5

पर पाइथन डीकोड एमपी 3 में मेरे पास टोरनाडो पायथन सर्वर है जो एक परिवर्तनीय बिटरेट एमपी 3 फ़ाइल को एक समय में एक खंड को स्वीकार करता है (भाग फिक्स्ड फिक्स्ड फिक्स्ड से बने होते हैं)।मैक ओएस

मैं बस इतना कर रहा हूं कि बाइनरी आगे बढ़ रहा है, हालांकि, मैं खंड की अवधि जानना चाहता हूं। क्योंकि यह परिवर्तनीय बिटरेट है, मैं एक साधारण गणना नहीं कर सकता। मैं पाइमेडिया में देख रहा था लेकिन मै मैक ओएस पर विकसित हुआ और ऐसा लगता है कि पाइमेडिया वहां स्थापित नहीं हो सकता है (यह भी, 2006 से इसे अपडेट नहीं किया गया है)। मैंने पिमाड भी कोशिश की लेकिन इसे इंस्टॉल नहीं किया जा सका (इसे 2007 से अपडेट नहीं किया गया है), ऐसा लगता है कि वैसे भी अधिक फ़ाइल केंद्रित है।

आदर्श रूप में, मैं mutagen उदाहरण के लिए प्रत्येक खंड से बिटरेट निकालना चाहता हूं। हालांकि, mutagen को एक फ़ाइल के रूप में एक इनपुट की आवश्यकता होती है जबकि मैं एक एमपी 3 फ्रेम या ऐसे फ्रेम की एक श्रृंखला इनपुट करना चाहता हूं।

def _on_read_frames(self, data): 
    logging.info('read from input:\n%s', data) 
    binary_audio = base64.b64decode(data) 
    # need to find out how many miliseconds went by here 

अद्यतन: यह एक लगभग वास्तविक समय वास्तुकला स्ट्रीमिंग इसलिए एमपी 3, छोटे-छोटे टुकड़ों में एन्कोड किया गया है तो मेरे वर्तमान समाधान जो साधारण गणना की अनुमति देता है निरंतर बिट दर का उपयोग करने के लिए है का हिस्सा है, मुझे एहसास हुआ है कि वहाँ परिवर्तनीय बिट दर का उपयोग करने के लिए लगभग कोई लाभ नहीं है।

+1

आपको एक बात है कि पहले से ही अपने मामले के लिए काम करता मिल जाएगा शक:

यहाँ प्रारूप के बारे में अधिक प्रलेखन है। एमपी 3 हैंडलिंग के लिए उत्परिवर्तन स्रोत ऐसा प्रतीत नहीं होता है कि बड़े पैमाने पर इसके आधार पर कुछ स्वयं लागू कर सकते हैं? – entropy

+1

यह महसूस करने के बाद कि वास्तविक समय में ऑडियो के स्ट्रीमिंग खंडों के लिए, परिवर्तनीय बिटरेट वास्तव में कोई लाभ प्रदान नहीं करता है। वास्तव में, यह एक नुकसान प्रदान करता है। मैं अब समझता हूं कि किसी ने भी इसके लिए टूल क्यों नहीं बनाए हैं, यह वास्तव में उपयोगी नहीं है! मैं वैसे भी ऐसा टूल बना सकता हूं, क्योंकि लगातार बिटरेट के साथ भी ऑडियो के किसी भी फ्रेम पर बिटरेट को मापने के लिए उपयोगी हो सकता है। – JonathanC

उत्तर

1

फ्रेम के प्रति 1,152 नमूने हैं, इसलिए यदि आपका हिस्सा N फ़्रेम की निश्चित संख्या है, तो आपका हिस्सा N*1152 नमूने की निश्चित लंबाई है। इसे मिलीसेकंड में बदलने के लिए, आपको फ्रेम हेडर से नमूना दर प्राप्त करने की आवश्यकता होगी।

आपको बस एक एमपी 3 पार्सर चाहिए। यहां एक पूर्ण उड़ा डिकोडर के लिए स्रोत कोड है: https://bitbucket.org/portalfire/pymp3 फ्रेम हेडर पार्सिंग कोड सहित, जो वास्तव में आपको चाहिए। http://www.codeproject.com/Articles/8295/MPEG-Audio-Frame-Header