कुछ मुख्य परिभाषाएँ:
- एक कोडेक (जैसे, H.264, HEVC, VP9) केवल वीडियो या ऑडियो भाग के लिए जिम्मेदार है, और एक या अधिक कोडेक्स को कंटेनर में विलय किया जा सकता है।
- एक कंटेनर (जैसे, MP4, MKV) उन्हें एक साथ रखने के लिए जिम्मेदार है और यह वह भी है जो आप आमतौर पर अपनी पसंद के मीडिया प्लेयर में खोलते हैं।
- एक विशेष एनकोडर (जैसे, x264, libvpx) एक इनपुट स्ट्रीम को कोडेक-कंप्लायंट बिटस्ट्रीम में बदलने के लिए जिम्मेदार है। एक विशेष कोडेक के लिए अक्सर कई एनकोडर होते हैं।
जैसा कि आप देख सकते हैं, हमें यहाँ कुछ चीजें समझानी होंगी।
कोडेक क्या है?
एनकोडर / डिकोडर के लिए एक कोडेक छोटा होता है, जिसका मूल रूप से सिर्फ निम्नलिखित अर्थ होता है: एक एनकोडर द्वारा उत्पन्न डेटा को हमेशा एक उचित डिकोडर द्वारा डिकोड किया जा सकता है। यह वीडियो, ऑडियो के लिए मान्य होता है, लेकिन आप क्रिप्टोग्राफी के बारे में भी सोच सकते हैं (एन्क्रिप्टेड संदेश प्रदर्शित करने के लिए एक एनकोडर को एक उपयुक्त डिकोडर की आवश्यकता होती है)।
आजकल, जब एक वीडियो कोडेक निर्दिष्ट किया जाता है, तो जो संस्थान इसमें भाग लेते हैं, वे आमतौर पर केवल मानक के सिंटैक्स को निर्दिष्ट करते हैं । उदाहरण के लिए, वे कहेंगे: "बिटस्ट्रीम प्रारूप को इस तरह होना चाहिए", " 0x810429AAB
यहां पर इसका अनुवाद किया जाएगा", आदि। अक्सर वे एक संदर्भ एनकोडर और डिकोडर की आपूर्ति करते हैं, लेकिन एक एनकोडर फिर कैसे इस तरह के मिलान के लिए लिखा जाता है। प्रारूप पूरी तरह से निर्माताओं पर निर्भर है।
यही कारण है कि आपको बहुत ही कोडेक के लिए बहुत सारे एनकोडर मिलेंगे, और उनमें से कुछ व्यावसायिक भी।
एक उदाहरण उदाहरण - H.264
इससे पहले कि हम शब्दावली का मिश्रण करें, एक उदाहरण लेते हैं। H.264 के मामले पर विचार करें । मानक का नाम H.264 है - यह वास्तविक एनकोडर का नाम नहीं है। Mainconcept एक बहुत अच्छा वाणिज्यिक एनकोडर है, जबकि x264 एक स्वतंत्र और खुला स्रोत है। दोनों निश्चित रूप से अच्छी गुणवत्ता देने का दावा करते हैं।
मात्र तथ्य यह है कि आप यहाँ एक प्रतियोगिता के लिए एन्कोडिंग को अनुकूलित कर सकते हैं। दोनों एन्कोडर एक मानकीकृत बिटस्ट्रीम वितरित करेंगे जो हमेशा एच .264-कंप्लायंट डिकोडर द्वारा डिकोड किया जा सकता है।
संक्षेप में
तो, सभी में, चलो बस एक एनकोडर होगा:
- वीडियो फ्रेम लें
- एक वैध बिटस्ट्रीम का उत्पादन करें
फिर बिटस्ट्रीम को एक कंटेनर में गुणा किया जाता है।
डिकोडर होगा:
- उस वैध बिटस्ट्रीम को लें
- इससे वीडियो फ्रेम को फिर से बनाएँ
वे दोनों एक कोडेक मानक के अनुरूप हैं। बस इतना ही!
वर्तमान कोडेक्स
इन दिनों, आप शायद नीचे दिए गए कोडेक्स के साथ एन्कोडेड वीडियो पाएंगे। दिलचस्प है, उनमें से लगभग सभी मोशन पिक्चर एक्सपर्ट्स ग्रुप (एमपीईजी) द्वारा बनाए गए थे । लेकिन कुछ अन्य, रॉयल्टी-फ्री कोडेक्स भी हैं, जैसे कि Google द्वारा निर्मित या ओपन मीडिया के लिए एलायंस, जो एमपीईजी मानकों के प्रतियोगी हैं।
ध्यान दें कि "एमपीईजी" कोडेक्स और कंटेनर दोनों को संदर्भित कर सकता है, जैसा कि आप नीचे देखेंगे। यह भ्रम में जोड़ता है, लेकिन बस यह जानिए कि "एमपीईजी" का कोई मतलब नहीं है, उदाहरण के लिए "मेरे पास एमपीईजी प्रारूप में एक फ़ाइल है" बहुत अस्पष्ट है।
MPEG-2 काफी पुराना है। इसकी पहली सार्वजनिक रिलीज 1996 से है। MPEG-2 वीडियो ज्यादातर डीवीडी और टीवी प्रसारण के लिए उपयोग किया जाता है, जैसे DVB-T या उपग्रह, और विरासत अनुप्रयोग जहां संगतता महत्वपूर्ण है। MPEG-2 वीडियो ज्यादातर एक .MPG कंटेनर में पाए जाते हैं ।
यह संभवतः वह है जो 2000 के दशक के मध्य में वेब के लिए वीडियो को एन्कोड करने के लिए इस्तेमाल किया गया था, लेकिन इसे बीच में ही हटा दिया गया था। यह व्यावहारिक फ़ाइल आकारों में अच्छी गुणवत्ता प्रदान करता है, जिसका मतलब है कि आप 600 एमबी सीडी पर 90 मिनट की लंबाई की पूरी फिल्म जला सकते हैं (जबकि एमपीईजी -2 के साथ आपको डीवीडी की आवश्यकता होगी, मेरा जवाब यहां देखें )। यह अब HD या 4K सामग्री के लिए इतना अच्छा काम नहीं करता है।
कुछ एनकोडर जो एमपीईजी -4 भाग 2 वीडियो का उत्पादन करते हैं , डिवएक्स हैं , इसके खुले खट्टे ripoff XviD , और नीरो डिजिटल हैं ।
MPEG-4 भाग 2 वीडियो ज्यादातर एक AVI कंटेनर में आते हैं , लेकिन MP4 भी अक्सर देखा जाता है।
इसे MPEG-4 एडवांस्ड वीडियो कोडिंग (AVC) या H.264 के रूप में भी जाना जाता है ; यह आज सबसे ज्यादा इस्तेमाल किया जाने वाला कोडेक है। यह छोटे फ़ाइल आकार में अच्छी गुणवत्ता प्रदान करता है और इसलिए इंटरनेट या मोबाइल उपकरणों के लिए सभी प्रकार के वीडियो के लिए पूरी तरह से अनुकूल है। आपको H.264 लगभग हर आधुनिक एप्लिकेशन में, फ़ोन से लेकर कैमकोर्डर तक मिलेगा। ब्लू-रे डिस्क पर, वीडियो अब H.264 में एन्कोडेड है।
इसके लिए कुछ एनकोडर हैं: x264 , NVENC (NVIDIA से), MainConcept । वीडियो ज्यादातर MP4 , MKV या MOV कंटेनर में आते हैं।
जिसे MPEG-H भाग 2 भी कहा जाता है, यह MPEG-4 भाग 10 / AVC / H.264 का उत्तराधिकारी है। यह उच्च प्रस्तावों ( 8K तक ) के उद्देश्य से है और H.264 की तुलना में 50% तक उच्च एन्कोडिंग प्रदर्शन (गुणवत्ता बनाम बिटरेट) के लिए पेश कर सकता है ( उदाहरण के लिए, यह पेपर देखें )।
मानक 2013 में प्रकाशित किया गया था, और धीरे-धीरे, कोडेक को आईपीटीवी या ऑनलाइन वीडियो प्रसारण के लिए अधिक से अधिक उपयोग किया जाने लगा है। HEVC का उपयोग Apple द्वारा iOS पर वीडियो और छवियों ( HEIF का उपयोग करके ) को स्टोर करने के लिए भी किया जाता है । हालाँकि, यह तथ्य है कि HEVC से जुड़े कई पेटेंट पूल हैं, जिनमें कई कंपनियां (लगभग सभी लेकिन Apple) रॉयल्टी-फ्री विकल्पों में शिफ्ट हो रही हैं। HEVC भी सभी ब्राउज़रों द्वारा मूल रूप से समर्थित नहीं है, जो इसे वेब स्ट्रीमिंग के लिए अनुपयोगी बनाता है।
सबसे प्रसिद्ध एनकोडर x265 है । वहाँ भी NVENC है । वीडियो आमतौर पर MP4 कंटेनरों में आते हैं ।
VP9 (VP8 का उत्तराधिकारी) मुख्य रूप से Google द्वारा विकसित एक कोडेक है। यह खुला और रॉयल्टी-मुक्त है, और कई ब्राउज़रों में लागू किया गया है । इसकी गुणवत्ता लगभग HEVC जितनी अच्छी है, और कभी-कभी इससे भी बेहतर ( नेटफ्लिक्स के इस पेपर को देखें )। VP9 वह है जो आप तब प्राप्त करते हैं जब आप YouTube का समर्थन करने वाले ब्राउज़र पर देखते हैं।
VP9 को libvpx एनकोडर के साथ एन्कोड किया जा सकता है , और यह अक्सर WebM या MKV कंटेनरों में आता है ।
कुछ कंपनियों को HEVC के लिए एक और मजबूत प्रतियोगी बनाने के लिए एक साथ मिला - लेकिन एक रॉयल्टी-फ्री विकल्प के रूप में। AV1 VP9 का उत्तराधिकारी होगा, और यह इस पर आधारित है कि VP10 क्या बनना चाहिए था। यह एलायंस फॉर ओपन मीडिया (अमेज़ॅन, सिस्को, Google, इंटेल, माइक्रोसॉफ्ट, मोज़िला और नेटफ्लिक्स द्वारा स्थापित) द्वारा समर्थित है। इसके बारे में यहाँ और पढ़ें ।
Libaom एनकोडर AV1 बिटस्ट्रीम उत्पन्न करने के लिए इस्तेमाल किया जा सकता है, लेकिन यह अभी भी प्रयोगात्मक है।
एक प्रारूप (कंटेनर) क्या है?
अब तक हमने केवल कच्चे "बिटस्ट्रीम" की व्याख्या की है, जो मूल रूप से सिर्फ कच्चे वीडियो डेटा है। आप वास्तव में आगे बढ़ सकते हैं और इस तरह के कच्चे बिटस्ट्रीम का उपयोग करके वीडियो देख सकते हैं। लेकिन ज्यादातर मामलों में यह पर्याप्त या व्यावहारिक नहीं है।
इसलिए, आपको वीडियो को कंटेनर में लपेटने की आवश्यकता है। कई कारण हैं:
- शायद आप वीडियो के साथ कुछ ऑडियो चाहते हैं
- शायद आप वीडियो में एक निश्चित भाग को छोड़ना चाहते हैं (जैसे, "1 पर जाएं: 32: 20.12")
- ऑडियो और वीडियो दोनों को पूरी तरह से सिंक्रनाइज़ किया जाना चाहिए
- वीडियो को एक विश्वसनीय नेटवर्क पर प्रेषित करने और पहले पैकेट में विभाजित करने की आवश्यकता हो सकती है
- वीडियो को एक हानिपूर्ण नेटवर्क (जैसे 3G) पर भेजा जा सकता है और पहले पैकेट में विभाजित किया जा सकता है
उन सभी कारणों के लिए, कंटेनर प्रारूपों का आविष्कार किया गया था, कुछ सरल, कुछ अधिक उन्नत। वे जो कुछ भी करते हैं वह वीडियो बिटस्ट्रीम को एक और बिटस्ट्रीम में "लपेट" देता है।
एक कंटेनर वीडियो और ऑडियो फ़्रेम को उनकी प्रस्तुति समय टिकट (पीटीएस) के अनुसार सिंक्रनाइज़ करेगा , जिससे यह सुनिश्चित होता है कि वे बिल्कुल उसी समय प्रदर्शित किए जाते हैं। यदि आवश्यक हो, तो स्ट्रीमिंग सर्वर के लिए जानकारी जोड़ने का भी ध्यान रखा जाएगा, ताकि एक स्ट्रीमिंग सर्वर को पता चल सके कि फ़ाइल के किस हिस्से को कब भेजा जाए।
आइए कुछ लोकप्रिय कंटेनरों पर एक नज़र डालें।
लोकप्रिय कंटेनर
आपको अधिकतर कंटेनर में लिपटे हुए वीडियो मिलेंगे। अन्य कम लोकप्रिय भी हैं, लेकिन जैसा कि मैंने कहा, ज्यादातर, यह उन है:
ऑडियो वीडियो इंटरलीव - यह सबसे बुनियादी कंटेनर है, यह सिर्फ ऑडियो और वीडियो को इंटरलेव करने के लिए है। यह 1992 में लिखा गया था और आज भी उपयोग किया जाता है, लेकिन इसे विरासत माना जाता है, इसलिए अब इसका उपयोग न करें।
MPEG-4 भाग 14 के रूप में भी जाना जाता है और यह QuickTime फ़ाइल प्रारूप पर आधारित है। यह H.264 वीडियो के लिए गो-टू-फॉर्मेट है, लेकिन इसमें HEVC, MPEG-4 पार्ट 2 और MPEG-2 भी हैं।
यह कंटेनर केवल ऑडियो भी लपेट सकता है, यही कारण है कि आपको बहुत सारी .mp4 फाइलें मिलेंगी, जो कि कोई वीडियो नहीं हैं, बल्कि AAC-एन्कोडेड ऑडियो, .m4a फाइलें (सिर्फ एक अलग एक्सटेंशन) भी हैं। एक्सटेंशन .m4v आमतौर पर वीडियो बिटस्ट्रीम के लिए लिया जाता है।
Matroska Video (MKV) एक खुला खट्टा और मुफ्त फ़ाइल स्वरूप है जो आजकल अक्सर पाया जाता है, क्योंकि यह मूल रूप से H.264 से VP9 तक किसी भी कोडेक का समर्थन करता है, और निश्चित रूप से कई ऑडियो कोडेक भी।
WebM MKV पर आधारित है और मुख्य रूप से VP9 वीडियो और Opus ऑडियो के लिए उपयोग किया जाता है - यह वेब स्ट्रीमिंग वीडियो के लिए पसंद का कंटेनर है जब इन कोडेक्स का उपयोग किया जाता है।
Ogg कंटेनर Theora वीडियो कोडेक (और Vorbis ऑडियो कोडेक ) के लिए पसंद का कंटेनर है , जिसे Xiph.Org Foundation ने भी बनाया है। यह भी स्वतंत्र और खुला स्रोत है (कोडेक की तरह)।
फ़्लैश वीडियो प्रारूप एडोब द्वारा बनाया गया था, उनके स्ट्रीमिंग अनुप्रयोगों में उपयोग के लिए। इसका उपयोग अब और नहीं किया जाता है, क्योंकि जिस तरह से स्ट्रीमिंग की जाती है वह पिछले वर्षों में काफी बदल गई है।
लोकप्रिय कोडेक्स और प्रारूप
इसके अलावा, निम्नलिखित में से कौन सा कोडेक्स हैं, कौन से फ़ाइल स्वरूप हैं, और कौन से न तो हैं?
- क्विकटाइम MOV : .mov क्विकटाइम फ़ाइल फॉर्मेट के लिए फाइल एक्सटेंशन है , जो Apple द्वारा बनाया गया एक कंटेनर है । इस कंटेनर को बाद में MP4 के लिए अनुकूलित किया गया था। यह सभी प्रकार के कोडेक्स ले जा सकता है। क्विकटाइम वास्तव में एक संपूर्ण मीडिया ढांचा है, यह वास्तव में किसी भी कोडेक को स्वयं निर्दिष्ट नहीं करता है जहां तक मेरा संबंध है।
- एमपीईजी (1, 2, 3, 4) : मोशन पिक्चर एक्सपर्ट्स ग्रुप द्वारा परिभाषित मानक। विवरण के लिए ऊपर मेरी पोस्ट देखें।
- WMV : विंडोज मीडिया वीडियो। यह वास्तव में एक उन्नत सिस्टम प्रारूप कंटेनर में लिपटे एक कोडेक है , जो फिर से .wm एक्सटेंशन का उपयोग करता है । अजीब है, लेकिन यह तरीका है।
- FFmpeg : यह न तो कोडेक है और न ही कंटेनर। यह वीडियो टूल्स का एक पुस्तकालय है जो विभिन्न कोडेक्स और कंटेनरों के बीच रूपांतरण की भी अनुमति देता है। FFmpeg खुले स्रोत
libavcodec
और libavformat
पुस्तकालयों पर क्रमशः कोडेक्स और कंटेनर बनाने के लिए निर्भर करता है। आज आपको मिलने वाले अधिकांश वीडियो उपकरण इस पर आधारित हैं।
- AVC : MPEG-4 भाग 10 या H.264 का पर्याय।
- DivX : MPEG-4 पार्ट 2 वीडियो के लिए एक अन्य प्रकार का एनकोडर।
- Xvid : MPEG-4 भाग 2 वीडियो के लिए एक प्रकार का एनकोडर। यह सिर्फ खुला स्रोत है, डिवएक्स का मुफ्त संस्करण है, जो निश्चित रूप से कुछ विवादों का कारण बना।
- H.264 : MPEG-4 भाग 10 या AVC का पर्यायवाची।
एक और बात:
क्या मैं सही शब्दावली का उपयोग भी कर रहा हूँ?
मुझे लगता है कि एक बार गलतफहमी से बचने के लिए "प्रारूप" के बजाय विशेष रूप से "कोडेक" और "कंटेनर" का उपयोग करना पसंद करेंगे। एक प्रारूप सैद्धांतिक रूप से कुछ भी हो सकता है, क्योंकि कोडेक्स और कंटेनर दोनों एक प्रारूप निर्दिष्ट करते हैं (यानी डेटा का प्रतिनिधित्व कैसे किया जाना चाहिए)।
कहा जा रहा है, FFmpeg शब्दावली कंटेनर के लिए "प्रारूप" का उपयोग करना होगा। इसका कारण यह भी है:
libavcodec
एन्कोडिंग / डिकोडिंग के लिए पुस्तकालय
libavformat
कंटेनरों के लिए पुस्तकालय