एक बार जब मुझे एक सरल (जैसा कि मुझे तब लग रहा था) कार्य को हल करने की आवश्यकता थी - एक PHP स्क्रिप्ट में एक एमपी 3 फ़ाइल की अवधि का पता लगाने के लिए। मैंने ID3 टैग के बारे में सुना और तुरंत सोचा कि अवधि की जानकारी या तो टैग में या एमपी 3 फ़ाइल के हेडर में संग्रहीत है। इंटरनेट पर सतही खोजों से पता चला कि इस समस्या को हल करने में कुछ मिनटों में काम नहीं होगा। चूंकि मैं स्वभाव से काफी जिज्ञासु और समय से बाहर था - मैंने तृतीय-पक्ष टूल का उपयोग नहीं करने का निर्णय लिया, लेकिन अपने दम पर सबसे लोकप्रिय प्रारूपों में से एक का पता लगाने के लिए।
यदि आप अंदर क्या चाहते हैं, तो बिल्ली (यातायात) में आपका स्वागत है।
इस लेख में, हम ID3v2 टैग के निष्कर्षण पर ध्यान केंद्रित नहीं करेंगे - यह एक अलग लेख में रखा जा सकता है, क्योंकि विभिन्न बारीकियां हैं। और उन हेडर के टुकड़ों पर भी जो व्यावहारिक रूप से वर्तमान में उपयोग नहीं किए जाते हैं (उदाहरण के लिए, एक एमपी फ्रेम के एम्पैसिस हेडर का हिस्सा)। इसके अलावा, हम स्वयं ऑडियो डेटा की संरचना पर विचार नहीं करते हैं - वही जो हम वक्ताओं से सुनते हैं।
ID3 टैग
ID3 (एक एमपी 3 की पहचान करें) मेटाडेटा प्रारूप है जो एमपी 3 ऑडियो फाइलों में सबसे अधिक उपयोग किया जाता है। ID3 हस्ताक्षर में ट्रैक, एल्बम, कलाकार का नाम, आदि के नाम पर डेटा होता है, जो मल्टीमीडिया खिलाड़ियों और अन्य कार्यक्रमों, साथ ही हार्डवेयर खिलाड़ियों द्वारा फ़ाइल के बारे में जानकारी प्रदर्शित करने और स्वचालित रूप से ऑडियो संग्रह को व्यवस्थित करने के लिए उपयोग किया जाता है।
विकिपीडिया
ID3 डेटा के दो पूरी तरह से अलग संस्करण हैं: ID3v1 और ID3v2।
ID3v1 - में 128 बाइट्स का एक निश्चित आकार है, जो एमपी 3 फ़ाइल के अंत में संलग्न हैं। आप वहां स्टोर कर सकते हैं: ट्रैक नाम, कलाकार, एल्बम, वर्ष, टिप्पणी, ट्रैक नंबर (संस्करण 1.1 के लिए) और शैली।
बहुत जल्दी सभी को एहसास हुआ कि 128 बाइट्स इस तरह के डेटा को स्टोर करने के लिए बहुत छोटी जगह है। और इसलिए, समय के साथ, डेटा का एक दूसरा संस्करण दिखाई दिया और सफलतापूर्वक उपयोग किया जाता है - ID3v2 ।
पहले संस्करण के विपरीत, v2 टैग परिवर्तनशील लंबाई के होते हैं और इन्हें फ़ाइल की शुरुआत में रखा जाता है, जो स्ट्रीमिंग प्लेबैक की अनुमति देता है। (ID3v2.4 प्रारूप भी आपको फ़ाइल के अंत में डेटा स्टोर करने की अनुमति देता है)।
ID3v2 डेटा में एक हेडर और बाद में ID3v2 फ्रेम होते हैं। उदाहरण के लिए, संस्करण ID3v2.3 में 70 से अधिक प्रकार के फ्रेम हैं।
- मार्कर हमेशा 'ID3' के बराबर होता है
- वर्तमान में ID3v2.2, ID3v2.3 और ID3v2.4 के तीन संस्करण हैं
संस्करण v2.2 पदावनत है।
v2.3 सबसे लोकप्रिय संस्करण है।
v2.4 - लोकप्रियता प्राप्त करना। V2.3 में से एक अंतर यह है कि यह UTF-8 एन्कोडिंग के उपयोग की अनुमति देता है (और न केवल UTF-16) - झंडे। वर्तमान में, केवल तीन (5,6,7) बिट्स का उपयोग किया जाता है:
बिन:% एबीसीपीआर
एक 'अनसिंक्रनाइज़ेशन' - केवल MPEG-2 और MPEG-2.5 स्वरूपों के साथ उपयोग किया जाता है।
b 'विस्तारित हैडर' - एक विस्तारित हेडर की उपस्थिति को इंगित करता है
'प्रायोगिक संकेतक' के साथ - एक प्रायोगिक संकेतक - लंबाई । ID3v2 डेटा लंबाई निर्दिष्ट करने की ख़ासियत यह है कि प्रत्येक बाइट में 7 बिट का उपयोग नहीं किया जाता है और हमेशा 0 पर सेट होता है।
एक उदाहरण पर विचार करें:
इस मामले में, ID3v2 हेडर (10 बाइट्स) के साथ - ID3v2 डेटा 1024 बाइट्स लेता है।
ID3v2 हेडर के बाद, टैग स्वयं चलते हैं। ID3v2 टैग पढ़ने का एक विस्तृत विश्लेषण, जैसा कि ऊपर उल्लेख किया गया है, मैंने इस लेख में शामिल नहीं करने का फैसला किया।
अब हमें ID3 टैग की उपस्थिति और लंबाई के बारे में जानकारी है और हम एमपी 3 फ्रेम को पार्स करने के साथ आगे बढ़ सकते हैं और समझ सकते हैं कि अवधि कहाँ संग्रहीत है। और एक ही समय में बाकी सब कुछ समझें।
एमपी 3 फ्रेम
संपूर्ण mp3 फ़ाइल में फ़्रेम होते हैं जिन्हें केवल क्रमिक रूप से पुनर्प्राप्त किया जा सकता है। फ्रेम में हेडर और ऑडियो डेटा होता है। चूंकि हम खुद को टेप रिकॉर्डर के लिए फर्मवेयर लिखने का लक्ष्य निर्धारित नहीं करते हैं, इसलिए हम फ्रेम हेडर में रुचि रखते हैं।
उसके बारे में और अधिक (टेबल और सूखी जानकारी का एक गुच्छा)
हेडर का आकार 4 बाइट्स है।
विवरण:
- [०-१०] मार्कर - ११ बिट्स इकाइयों से भरा (फ्रेम सिंक)
- [११-१२] एमपीईजी संस्करण सूचकांक (ऑडियो संस्करण आईडी)
- [१३-१४] लेयर वर्जन इंडेक्स (लेयर इंडेक्स)
वैसे, एमपीईजी एमपीईजी -1 लेयर III है - [१५] सुरक्षा सा
1 - कोई सुरक्षा नहीं
0 - हेडर 16-बिट संरक्षित है। CRC (हेडिंग के बाद) - [१६-१९] बिटरेट सूचकांक
तालिका किलोबाइट / सेकंड में बिटरेट को संग्रहीत करती है। हालांकि, इस प्रारूप में, यह माना जाता है कि 1 किलोबिट = 1000 बिट्स, 1024 नहीं। इस प्रकार, 96 Kbps = 96000 बिट्स / सेकंड। - [२०-२१] नमूना दर सूचकांक
- [२२] पैडिंग बिट
यदि यह स्थापित है, तो डेटा को 1 बाइट द्वारा स्थानांतरित किया जाता है। फ्रेम आकार की गणना के लिए यह महत्वपूर्ण है। - [२३] निजी बिट (केवल जानकारी के लिए)
- [२४-२५] चैनल मोड
- [२६-२ mode ] चैनल मोड का विस्तार। (मोड एक्सटेंशन) केवल संयुक्त स्टीरियो के साथ उपयोग किया जाता है
- [२ Copyright ] कॉपीराइट (कॉपीराइट बिट) - केवल जानकारी के लिए
- [२ ९] ओरिजिनल (मूल बिट) - केवल जानकारी के लिए।
- [३०-३१] जोर (जोर) - वर्तमान में व्यावहारिक रूप से उपयोग नहीं किया जाता है।
डेटा संपीड़न मोड या बिटरेट क्या है
डेटा संपीड़न के 3 तरीके हैं:
CBR (निरंतर बिटरेट) - निरंतर बिटरेट। यह पूरे ट्रैक में नहीं बदलता है।
VBR (वेरिएबल बिटरेट) - वेरिएबल बिटरेट। इस संपीड़न के साथ, बिटरेट पूरे ट्रैक में लगातार बदलता रहता है।
एबीआर (औसत बिटरेट) - औसत बिटरेट। किसी फ़ाइल को एन्कोडिंग करते समय इस अवधारणा का उपयोग किया जाता है। "आउटपुट" पर, वीबीआर के साथ एक फ़ाइल प्राप्त की जाती है।
सीबीआर
यदि फ़ाइल एक निरंतर बिटरेट के साथ एन्कोडेड है, तो हम
अवधि = ऑडियो आकार / बिटरेट (बिट्स में!) * 8
उदाहरण के लिए, किसी फ़ाइल का आकार 350,670 बाइट्स होता है। ID3v1 टैग (128 बाइट) और ID3v2 टैग (1024 बाइट) हैं। बिटरेट = 96. इसलिए, ऑडियो डेटा का आकार 350670 - 128 - 1024 = 349518 बाइट्स है।
अवधि = 349518/96000 * 8 = 29.1265 = 29 सेकंड
VBR
यह समझाने की आवश्यकता है कि संपीड़न मोड कैसे निर्धारित किया जाए। सब कुछ सरल है। यदि फ़ाइल VBR के साथ संपीड़ित होती है, तो VBR हेडर जोड़ा जाता है। इसकी उपस्थिति से, हम समझ सकते हैं कि एक चर बिटरेट का उपयोग किया जाता है।
दो प्रकार के हेडर हैं: ज़िंग और वीबीआरआई।
ज़िंग को तालिका के अनुसार पहले एमपी फ्रेम की शुरुआत से ऑफसेट के साथ रखा गया है:
उदाहरण के लिए: हमारा ID3v2 टैग 1024 बाइट्स रखता है। यदि हमारे एमपी-फाइल में "स्टीरियो" चैनल मोड है, तो वीबीआर जिंग हेडर 1024 + 32 = 1056 बाइट्स के ऑफसेट के साथ शुरू होगा।
VBRI हेडर हमेशा पहले एमपी 3 फ्रेम की शुरुआत से +32 बाइट्स के ऑफसेट के साथ रखा जाता है।
दोनों हेडर में पहले चार बाइट्स में जिंग के लिए 'जिंग' या 'इंफो' टोकन होता है। और VBRI के लिए 'VBRI'।
ये VBR हेडर लंबाई में परिवर्तनशील होते हैं और इनमें विभिन्न फ़ाइल एन्कोडिंग जानकारी होती है। वीबीआर हेडर की संरचना के बारे में अधिक जानकारी (और न केवल) पाई जा सकती है, उदाहरण के लिए, यहां ।
मैं आपको केवल यह बताता हूं कि इस समय हमारे लिए क्या रुचियां हैं। अर्थात्, तख्ते की संख्या (तख्ते की संख्या)। यह संख्या 4 बाइट्स लंबी है।
जिंग हेडर में हेडर की शुरुआत से +8 बाइट्स की भरपाई होती है। VBRI में, हेडर की शुरुआत से +14 बाइट्स।
प्रति फ्रेम टेबल का उपयोग करते हुए, हम एक चर बिटरेट के साथ एन्कोडेड एक एमपी 3 फ़ाइल की अवधि प्राप्त कर सकते हैं।
अवधि = फ्रेम की संख्या * प्रति फ्रेम / नमूना दर के नमूने
उदाहरण के लिए: वीबीआरआई हेडर से, फ्रेम की संख्या 1118 थी, प्रति फ्रेम नमूने = 1152। नमूना आवृत्ति = 44100।
अवधि = 1118 * 1152/44100 = 29.204 = 29 सेकंड।
आज के लिए बस इतना ही। अगर यह किसी के लिए उपयोगी था - धन्यवाद ।
उन लोगों के लिए जो तुरंत एमपी 3 के अंदर खुदाई करना चाहते हैं - यहां एक php स्क्रिप्ट है जो मैंने इस लेख के साथ एक साथ खुद के लिए लिखी है और परीक्षण के लिए चार छोटी एमपी 3 फाइलें।
संदर्भ
id3.org - आईडी 3 के बारे में पढ़ें
id3.org - और एमपी 3 फ्रेम के बारे में कुछ
एमपी 3 फ्रेम के बारे में बहुत विस्तृत
getID3: एमपी 3 के बारे में जानकारी प्राप्त करने के लिए एक अच्छी लाइब्रेरी। (PHP)