VP9 के बिटरेट मोड के बारे में ज़्यादा जानकारी

परिचय

हमने बुनियादी एन्कोडिंग पेजों में बिटरेट मोड के बारे में सामान्य जानकारी दी है. हालांकि, इनमें सिर्फ़ सीक्यू (कॉन्स्ट्रेंट क्वालिटी) मोड के बारे में बताया गया है.

इस दस्तावेज़ में, VP9 के बिटरेट को अलग-अलग स्थितियों के हिसाब से ऑप्टिमाइज़ करने के अन्य व्यावहारिक तरीके बताए गए हैं. यहां दिए गए उदाहरणों में FFmpeg का इस्तेमाल किया गया है.

संपीड़न

VP9 जैसी वीडियो कंप्रेस करने की टेक्नोलॉजी का मकसद, असली उपयोगकर्ताओं को समझने लायक इमेज और मोशन की जानकारी देने के लिए ज़रूरी डेटा की मात्रा को कम करना है.

इसके लिए, क्वांटाइज़ेशन जैसी मुख्य तकनीकों का इस्तेमाल किया जाता है. क्वांटाइज़र, इमेज के अलग-अलग डिजिटाइज़ किए गए एलिमेंट को गणित के हिसाब से आसान बनाता है. उदाहरण के लिए, यह इस्तेमाल किए गए रंगों की रेंज को कम कर सकता है. साथ ही, कम की गई कलर रेंज में रिज़ॉल्यूशन की कमी को "स्मूद आउट" करने के लिए, डेटा पर गणितीय फ़ंक्शन भी लागू कर सकता है. ऐसे कई फ़ंक्शन उपलब्ध हैं.

क्वांटाइज़ेशन (या "Q") के बारे में Wikipedia के लेख में अच्छी तरह से बताया गया है.

VP9 में, ट्रांसफ़ॉर्म कोएफ़िशिएंट पर क्वांटाइज़ेशन किया जाता है. इससे एन्कोडिंग में मदद मिलती है. साथ ही, क्वालिटी को बनाए रखने के लिए ज़रूरी बिटरेट कम हो जाता है.

क्वांटाइज़ेशन (ज़्यादा Q नंबर) बढ़ने पर, इमेज की क्वालिटी खराब हो जाती है और उसमें मौजूद जानकारी भी कम हो जाती है. हालांकि, फ़्रेम को सेव करने के लिए कम डेटा की ज़रूरत होती है. ज़्यादातर मामलों में, VP9 एनकोडर समय के साथ Q को बदलकर, बिटरेट के लक्ष्यों को पूरा करता है. यह हर फ़्रेम की जटिलता पर निर्भर करता है.

इस्तेमाल के उदाहरण के हिसाब से ऑप्टिमाइज़ेशन

उपयोगकर्ता की ज़रूरतों के हिसाब से VP9 कंप्रेशन को "ट्यून" करने के लिए, प्रोग्रामिंग इंटरफ़ेस की मदद से, शुरुआती कंप्रेशन के दौरान क्वालिटी और बिटरेट के बीच संतुलन को अडजस्ट किया जा सकता है.

एनकोडर में स्पीड, क्वालिटी, और बिटरेट के बीच स्लाइडिंग ट्रेडऑफ़ होता है.

  • अगर कोई उपयोगकर्ता क्वालिटी पर फ़ोकस करता है, तो उसे एन्कोड करने में ज़्यादा समय लगने के लिए तैयार रहना चाहिए. इसके अलावा, उसे प्रोसेसिंग के लिए ज़्यादा और बेहतर रिसॉर्स उपलब्ध कराने चाहिए.

  • अगर कोई उपयोगकर्ता, VP9 एन्कोड की गई फ़ाइल का साइज़ कम रखना चाहता है और उसे जल्दी डिलीवर करना चाहता है, तो उसे इमेज को प्रोसेस करने के लिए क्वांटाइज़र को कम समय देना होगा. इससे क्वांटाइज़र को कम जानकारी मिलेगी.

  • अगर कोई उपयोगकर्ता सिर्फ़ डिलीवरी की स्पीड पर फ़ोकस करता है (उदाहरण के लिए, लाइव वेबकास्ट या दोतरफ़ा वीडियो कॉन्फ़्रेंस में), तो क्वांटाइज़ेशन पूरी तरह से इस बात पर निर्भर कर सकता है कि नेटवर्क पर डेटा के इस्तेमाल किए जा सकने वाले बाइट किस दर से भेजे जा सकते हैं. इसे "बिटरेट" कहा जाता है.

सही विकल्प, इस्तेमाल के हर मामले के हिसाब से अलग-अलग होगा. VP9 में चार "बिटरेट मोड" होते हैं. इनमें आसानी से कॉन्फ़िगरेशन किया जा सकता है, ताकि आप अपने इस्तेमाल के उदाहरण के हिसाब से इस बैलेंस को आसानी से अडजस्ट कर सकें.

VP9 बिटरेट मोड

आइए, VP9 के मुख्य बिटरेट मोड के बारे में जानते हैं:

मोड
कॉन्स्टेंट क्वांटीफ़ायर (Q) इससे क्वांटाइज़र की तय वैल्यू तय की जा सकती है; बिटरेट अलग-अलग होगा
क्वालिटी की सीमा (सीक्यू) इस विकल्प की मदद से, क्वालिटी का ज़्यादा से ज़्यादा लेवल सेट किया जा सकता है. बिटरेट पैरामीटर के हिसाब से क्वालिटी में अंतर हो सकता है
वैरिएबल बिटरेट (वीबीआर) यह बिटरेट की सीमाओं के अंदर, समय के साथ क्वालिटी और बिटरेट को बैलेंस करता है
कॉन्सटेंट बिटरेट (सीबीआर) इस मोड में, क्वालिटी में बदलाव होने पर भी बिटरेट को काफ़ी हद तक स्थिर रखने की कोशिश की जाती है

Q

Q मोड चार्ट

कॉन्स्टेंट क्वांटाइज़र मोड उन स्थितियों के लिए सबसे सही है जहां फ़ाइल के साइज़ और बिटरेट की तुलना में, फ़ाइनल क्वालिटी ज़्यादा ज़रूरी होती है.

Q सेटिंग के इस्तेमाल के उदाहरण, डिजिटल सिनेमा, डिजिटल एडिट सुइट या डिजिटल साइनेज ऐप्लिकेशन में देखे जा सकते हैं. इनमें कॉन्टेंट को किसी फ़िज़िकल स्टोरेज मीडियम पर या बिना किसी समयसीमा के डिलीवर किया जा सकता है. ऐसा कॉन्टेंट के इस्तेमाल से काफ़ी पहले किया जाता है. साथ ही, इनमें आउटपुट की विज़ुअल क्वालिटी सबसे अच्छी होनी चाहिए.

VP9 Q मोड के बिटरेट को ऑप्टिमाइज़ करना

कॉन्स्टेंट क्वाटाइज़र मोड के लिए, कम से कम कॉन्फ़िगरेशन की ज़रूरत होती है. जैसा कि इसके नाम से पता चलता है, Q मोड का मकसद क्वांटाइज़र को टारगेट "क्वालिटी" लेवल पर बनाए रखना है. साथ ही, क्वांटाइज़र को यह तय करने की अनुमति देना है कि उसे किस डेटा को प्रोसेस करना है. उपयोगकर्ता को सिर्फ़ टारगेट क्वालिटी तय करनी होती है.

बेसिक एन्कोडिंग लेख में, इमेज प्रोसेसिंग पर फ़ोकस करके (बिटरेट पर फ़ोकस नहीं करके) टारगेट क्वालिटी की खास बातों के बारे में ज़्यादा जानकारी दी गई है.

Q मोड के बिटरेट को ऑप्टिमाइज़ करने के लिए, FFmpeg के इन कमांड-लाइन पैरामीटर का इस्तेमाल करें:

ffmpeg
-b:v 0 वीडियो बिटरेट को 0 के तौर पर मार्क करने का मतलब है कि हमने "Q" मोड को साफ़ तौर पर सेट किया है
-g <arg> यह फ़्रेम में मुख्य-फ़्रेम का इंटरवल सेट करता है. डिफ़ॉल्ट रूप से, यह 240 पर सेट होता है
-crf <arg> क्वालिटी का ज़्यादा से ज़्यादा लेवल सेट करता है. मान्य वैल्यू 0 से 63 के बीच की होनी चाहिए. कम नंबर का मतलब है कि क्वालिटी बेहतर है
-quality good -speed 0 यह डिफ़ॉल्ट सेटिंग है और ज़्यादातर ऐप्लिकेशन के लिए इसका इस्तेमाल करने का सुझाव दिया जाता है. best एक रिसर्च टूल है. यह -quality good -speed 0 से थोड़ा बेहतर है
-lossless लॉसलेस मोड

Q मोड बिटरेट : FFmpeg के उदाहरण

पहला उदाहरण, Q मोड की बहुत ज़्यादा सेटिंग का है. इसे सिर्फ़ उदाहरण के तौर पर दिया गया है. (इन उदाहरणों में, 120 सेकंड की क्लिप को प्रोसेस करने में भी कई घंटे लगेंगे. साथ ही, आम तौर पर आउटपुट फ़ाइल का साइज़, ओरिजनल सोर्स से काफ़ी बड़ा होता है.)

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -g 1 -b:v 0 -crf 0 -quality good \
  -speed 0 -lossless 1 -c:a libvorbis Q_g_1_crf_0_120s_tears_of_steel_1080p.webm.webm

-crf के असर की तुलना करने के लिए, यहां दिए गए उदाहरणों में सिर्फ़ -crf का अंतर है. ध्यान दें कि -g को परिभाषित नहीं किया गया है. इसलिए, यह डिफ़ॉल्ट रूप से 240 पर सेट हो जाएगा. साथ ही, -crf डिफ़ॉल्ट रूप से 10 पर सेट होता है. इसलिए, तीन उदाहरणों में से दूसरे उदाहरण में किसी भी पैरामीटर को शामिल न करने पर भी हमें यही नतीजा मिलता:

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 0 -crf 0 -quality good \
  -speed 0 -c:a libvorbis Q_crf_0_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 0 -crf 10 -quality good \
  -speed 0 -c:a libvorbis Q_crf_10_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 0 -crf 63 -quality good \
  -speed 0 -c:a libvorbis Q_crf_63_120s_tears_of_steel_1080p.webm

इन उदाहरणों का आउटपुट, डिस्क पर अलग-अलग साइज़ का होता है. -crf को 0 पर सेट करने पर फ़ाइल का साइज़ 711.8 एमबी था. -crf को 10 पर सेट करने पर फ़ाइल का साइज़ 125.3 एमबी था. वहीं, -crf को 63 पर सेट करने पर फ़ाइल का साइज़ 4.5 एमबी था. आसान शब्दों में कहें, तो इससे पता चलता है कि हमने -crf आर्ग्युमेंट की वैल्यू बढ़ाकर, VP9-कोड वाली फ़ाइल की क्वालिटी को कम कर दिया है. सभी आउटपुट फ़ाइलों की पूरी खास जानकारी, यहां दिए गए नतीजों की टेबल में मौजूद है.

अब हम -g सेटिंग में बदलाव करने से होने वाले असर की तुलना करेंगे.

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -g 1 -b:v 0 -quality good \
  -speed 0  -c:a libvorbis Q_g_1_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -g 240 -b:v 0 -quality good \
  -speed 0 -c:a libvorbis Q_g_240_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -g 480 -b:v 0 -quality good \
  -speed 0 -c:a libvorbis Q_g_480_120s_tears_of_steel_1080p.webm

हमें पता चला है कि -g 1 सेटिंग से, बहुत बड़ी फ़ाइल बनती है. इसका साइज़ 25.9 एमबी है. इसकी तुलना -g 240 (डिफ़ॉल्ट वैल्यू को साफ़ तौर पर सेट करना) से करें. इसमें हमें 4.5 एमबी की फ़ाइल मिलती है. वहीं, -g 480 में हमें 4.4 एमबी की फ़ाइल मिलती है.

CQ

फ़ाइल पर आधारित वीडियो के लिए, CQ मोड का इस्तेमाल करने का सुझाव दिया जाता है.

CQ मोड चार्ट

हमारा सुझाव है कि ज़्यादातर तरह के कॉन्टेंट के लिए, बिटरेट कैप के साथ कॉन्स्ट्रेंट क्वालिटी (सीक्यू) मोड का इस्तेमाल करें. ज़्यादातर वीडियो में, तेज़ गति वाले सीन (जैसे, ऐक्शन सीक्वेंस) और कम जानकारी वाले सीन (जैसे, बातचीत) का मिक्सचर होता है. CQ मोड की मदद से, एन्कोडर लंबे और आसान सीन के दौरान क्वालिटी के सही लेवल को बनाए रख सकता है. ऐसा, बिट बर्बाद किए बिना किया जा सकता है. साथ ही, मुश्किल सीक्वेंस के लिए ज़्यादा बिट असाइन किए जा सकते हैं.

हालांकि, हमें अब भी इस प्रोसेस को सीमित करना होगा. इसके लिए, हमें ऊपरी सीमा तय करनी होगी. ऐसा न करने पर, हो सकता है कि इमेज को कंप्रेस न किया जा सके! हम कम रेंज भी सेट कर सकते हैं. इसमें, अगर इमेज काली है और एन्कोडिंग प्रोसेस का इससे कोई लेना-देना नहीं है, तो भी हम उस डेटा को प्रोसेस करेंगे. हालांकि, हो सकता है कि हम उसे उतनी कुशलता से प्रोसेस न कर पाएं जितना हम कर सकते हैं. हालांकि, इसका नतीजा यह होगा कि काली इमेज भी ज़्यादा कंप्रेस नहीं होगी और "बहुत काली" दिखेगी.

इसके अलावा, हमें quantizer threshold भी सेट करना होगा. VP9 में, क्वांटाइज़र थ्रेशोल्ड को 0 से घटाकर 63 तक किया जा सकता है.

CQ मोड के लिए, FFmpeg के इन कमांड-लाइन पैरामीटर का इस्तेमाल किया जाता है:
ffmpeg
-b:v <arg> यह विकल्प, टारगेट बिटरेट सेट करता है. जैसे, 500k
-minrate <arg>
-maxrate <arg>
कम से कम और ज़्यादा से ज़्यादा बिटरेट सेट करता है.
-crf <arg> क्वालिटी का ज़्यादा से ज़्यादा लेवल सेट करता है. मान्य वैल्यू 0 से 63 तक होती हैं. कम संख्याएं, बेहतर क्वालिटी वाली होती हैं.
CQ बिटरेट मोड: FFmpeg के उदाहरण

पहले उदाहरण में, काफ़ी हद तक सटीक जानकारी दी गई है. हालांकि, Q के लिए ऊपर दिए गए उदाहरणों की तुलना में, हमें पता चला है कि इससे बिटरेट ज़्यादा रेंज में चले जाते हैं और आउटपुट क्वालिटी काफ़ी बेहतर होती है. फ़ाइल का साइज़ काफ़ी बड़ा है.

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1000k -maxrate 4000k -crf 10  -c:a libvorbis \
  CQ_4000_1000_crf_10_120s_tears_of_steel_1080p.webm

इस उदाहरण में, डिस्क पर आउटपुट फ़ाइल का साइज़ 20.2 एमबी था. यह ऊपर दिए गए उदाहरणों में, Q मोड में एन्कोड की गई फ़ाइल के साइज़ से काफ़ी कम है.

इसके उलट, अगले उदाहरण में हमने बिटरेट को ज़्यादा सटीक रेंज तक सीमित कर दिया है.

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1500k -maxrate 2500k -crf 10  -c:a libvorbis \
  CQ_2500_1500_crf_10_120s_tears_of_steel_1080p.webm

इस उदाहरण में, आउटपुट फ़ाइल का साइज़ 24.1 एमबी था. साथ ही, ज़्यादा जटिलता और मोशन वाले वीडियो की क्वालिटी, पिछले उदाहरण की तुलना में काफ़ी कम हो गई थी.

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 1000k \
  -minrate 750k -maxrate 1400k -crf 10  -c:a libvorbis \
  CQ_1400_750_crf_10_120s_tears_of_steel_1080p.webm

इस आखिरी उदाहरण में, आउटपुट का साइज़ काफ़ी कम हो गया है. यह डिस्क पर 13.2 एमबी तक कम हो गया है.

VBR

ज़्यादा मोशन वाले कॉन्टेंट (जैसे, खेल-कूद) के लिए, मांग पर मिलने वाले वीडियो की फ़ाइलों को स्ट्रीम करने के लिए, वैरिएबल बिटरेट मोड (वीबीआर) का इस्तेमाल करने का सुझाव दिया जाता है. यह एचटीटीपी पर आधारित डिलीवरी के लिए सबसे सही है.

वीबीआर मोड का चार्ट

वीबीआर मॉडल में, ऐक्शन सीन को "आसान" सीन की तुलना में ज़्यादा बिटरेट के साथ कोड किया जा सकता है. ये सीन, कीफ़्रेम के साथ मेल खाते हैं.

स्ट्रीमिंग डिलीवरी के बड़े मॉडल के लिए, वीबीआर के फ़ायदों से डिस्ट्रिब्यूशन और इन्फ़्रास्ट्रक्चर, दोनों के मामले में काफ़ी फ़ायदा मिल सकता है. जब एक ही इन्फ़्रास्ट्रक्चर से कई वीबीआर स्ट्रीम डिलीवर की जाती हैं, तो सिस्टम का इस्तेमाल करने वाले सभी दर्शकों को इसका फ़ायदा मिल सकता है.

VP9 VBR का इस्तेमाल, खेल-कूद और ज़्यादा मोशन वाले अन्य कॉन्टेंट को एन्कोड करने के लिए भी किया जा सकता है. ज़्यादा जटिलता वाले कॉन्टेंट के लिए, वीबीआर की मदद से कम मोशन वाले वीडियो की क्वालिटी बेहतर होती है.

वीबीआर मोड के लिए, FFmpeg के इन कमांड-लाइन पैरामीटर का इस्तेमाल किया जाता है:
ffmpeg
-quality good good क्वालिटी, मांग पर उपलब्ध वीडियो के लिए सही है
-speed <arg> मांग पर वीडियो दिखाने की सुविधा के लिए, मान्य वैल्यू 0 से 5 तक होती हैं. इसमें 0 का मतलब सबसे अच्छी क्वालिटी और 5 का मतलब सबसे खराब क्वालिटी होता है. (लाइव स्ट्रीमिंग के लिए, यह रेंज 5 से 9 होती है - नीचे सीबीआर देखें)
वीबीआर बिटरेट मोड: FFmpeg के उदाहरण
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1500k -maxrate 2500k -quality good -speed 0  -c:a libvorbis \
  VBR_good_0_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1500k -maxrate 2500k -quality good -speed 5  -c:a libvorbis \
  VBR_good_5_120s_tears_of_steel_1080p.webm

CBR

VP9 का इस्तेमाल करके लाइव स्ट्रीमिंग करने के लिए, स्थिर बिटरेट मोड (सीबीआर) का इस्तेमाल करने का सुझाव दिया जाता है.

CBR मोड का चार्ट

CBR में, ज़्यादा से ज़्यादा बिटरेट को "कड़ी सीमा" के तौर पर सेट किया जाता है. इसका मतलब है कि एन्कोडिंग की प्रोसेस, नेटवर्क की क्षमता से ज़्यादा डेटा जनरेट नहीं कर सकती.

उदाहरण के लिए, रीयल-टाइम में बातचीत (वीडियो कॉन्फ़्रेंसिंग) की स्ट्रीम के लिए, यह ज़रूरी है कि एन्कोडिंग ऐप्लिकेशन, नेटवर्क में इतना डेटा न भेजे जितना वह ले जा सकता है. ऐसा होने पर, ऑडियो/वीडियो सिंक होने में समस्याएं आती हैं या फ़्रेम फ़्रीज़ हो जाते हैं. इससे उपयोगकर्ता अनुभव पर काफ़ी बुरा असर पड़ता है. यह असर, कंप्रेस करने की क्षमता कम होने से पड़ने वाले असर से ज़्यादा होता है. हार्ड सीलिंग तय होने पर, VP9 उस सीलिंग तक पहुंचने पर क्वालिटी को कम कर देगा.

CBR मोड के लिए, FFmpeg के इन कमांड-लाइन पैरामीटर का इस्तेमाल किया जाता है:
ffmpeg
-quality realtime realtime क्वालिटी, लाइव स्ट्रीमिंग के लिए सही है
-speed <arg> लाइव स्ट्रीमिंग के लिए मान्य वैल्यू 5 से 9 तक होती हैं. इनमें 5 सबसे अच्छी क्वालिटी और 9 सबसे खराब क्वालिटी होती है. (वीडियो ऑन डिमांड के लिए, इनकी संख्या 0 से 5 तक होती है. ऊपर वीबीआर देखें.)
-minrate <arg>
-maxrate <arg>
कम से कम और ज़्यादा से ज़्यादा बिटरेट सेट करता है ** इन्हें CBR मोड के लिए, एक ही -b:v बिटरेट वैल्यू पर सेट किया जाना चाहिए** .

आसान शब्दों में कहें, तो हम टारगेट, कम से कम, और ज़्यादा से ज़्यादा बिटरेट को एक ही वैल्यू पर सेट करते हैं. साथ ही, क्वांटाइज़र को बताते हैं कि ये कार्रवाइयां समय के हिसाब से ज़रूरी हैं.

सीबीआर बिटरेट मोड: FFmpeg के उदाहरण

नीचे दिए गए उदाहरणों में, बिटरेट को 2 एमबीपीएस और 500 केबीपीएस के टारगेट पर सेट करने के बारे में बताया गया है:

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 2000k -maxrate 2000k -quality realtime -speed 5 -c:a libvorbis \
  CBR_2000_realtime_speed_5_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 2000k -maxrate 2000k -quality realtime -speed 8 -c:a libvorbis \
  CBR_2000_realtime__8_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 500k \
  -minrate 500k -maxrate 500k -quality realtime -speed 5 -c:a libvorbis \
  CBR_500_realtime_speed_5_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 500k \
  -minrate 500k -maxrate 500k -quality realtime -speed 8 -c:a libvorbis \
  CBR_500_realtime_speed_8_120s_tears_of_steel_1080p.webm

नतीजे

ऊपर दिए गए हर एन्कोड को Ubuntu Linux सिस्टम पर किया गया था. इसकी खास बातें यहां दी गई हैं:

  • प्रोसेसर: 4x Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz
  • मेमोरी (रैम): 8060 एमबी (1492 एमबी इस्तेमाल की गई)
  • ग्राफ़िक्स: Intel HD Graphics 530 (Skylake GT2)
  • ओएस: Ubuntu 16.04 LTS

सभी मामलों में, सोर्स फ़ाइल Tears Of Steel से ली गई एक मिनट बीस सेकंड (1:20) की क्लिप थी.

फ़ाइल कोड में बदलने में लगने वाला समय (मिनटों में) डिस्क पर फ़ाइल का साइज़
Q_g_1_crf_0_120s_tears_of_steel_1080p.webm 81 1.06GB
Q_crf_0_120s_tears_of_steel_1080p.webm 131 711.8 एमबी
Q_crf_10_120s_tears_of_steel_1080p.webm 118 125.3 एमबी
Q_crf_63_120s_tears_of_steel_1080p.webm 27 4.5 एमबी
Q_g_1_120s_tears_of_steel_1080p.webm 51 25.9MB
Q_g_240_120s_tears_of_steel_1080p.webm 28 4.5 एमबी
Q_g_480_120s_tears_of_steel_1080p.webm 10 4.4 एमबी
CQ_4000_1000_crf_10_120s_tears_of_steel_1080p.webm 11 20.2MB
CQ_2500_1500_crf_10_120s_tears_of_steel_1080p.webm 9 24.1 एमबी
CQ_1400_750_crf_10_120s_tears_of_steel_1080p.webm 50 13.2 एमबी
VBR_good_0_120s_tears_of_steel_1080p.webm 3 23.4 एमबी
VBR_good_5_120s_tears_of_steel_1080p.webm 4 23.9 एमबी
CBR_2000_realtime_speed_5_120s_tears_of_steel_1080p.webm 2 24.8MB
CBR_2000_realtime_speed_8_120s_tears_of_steel_1080p.webm 1 21 एमबी
CBR_500_realtime_speed_5_120s_tears_of_steel_1080p.webm 1 8.5MB
CBR_500_realtime_speed_8_120s_tears_of_steel_1080p.webm 1 7.1 एमबी

यह देखा गया कि 5 से ज़्यादा -speed वैल्यू सेट करने पर, VP9 की प्रोसेसिंग स्पीड बदल जाती है. क्वांटाइज़ेशन में काफ़ी बढ़ोतरी हुई है. इसे बहुत कम क्वालिटी वाले फ़ास्ट बिटरेट पर "डिफ़रड" इफ़ेक्ट से देखा जा सकता है. हालांकि, VP9 अब भी बहुत कम बिटरेट पर 1080 पिक्सल का बहुत अच्छा आउटपुट दे सकता है. हालांकि, यह बड़े डिसप्ले के मुकाबले छोटे मोबाइल डिवाइसों के लिए ज़्यादा सही है.

री-स्केलिंग (री-साइज़िंग) के इस्तेमाल के उदाहरणों के लिए ज़रूरी बातें

VP9 के बिटरेट मोड अलग-अलग नहीं होते. इन्हें इस्तेमाल के उदाहरणों को खास तौर पर टारगेट करने के लिए, कई अन्य आर्ग्युमेंट और पैरामीटर के साथ जोड़ा जा सकता है. इसका एक सामान्य इस्तेमाल, आउटपुट वीडियो के डाइमेंशन को फिर से स्केल करना हो सकता है, ताकि किसी खास डिवाइस को टारगेट किया जा सके.

इसका सबसे अच्छा उदाहरण, एचडी स्ट्रीम को एसडी आउटपुट में बदलना है. इससे प्रोसेसिंग में लगने वाले समय और आउटपुट बिटरेट पर काफ़ी असर पड़ेगा. अगर दो FFmpeg कमांड एक जैसी हैं, तो आउटपुट वीडियो के साइज़ में बदलाव करने से, नतीजे के तौर पर मिलने वाली फ़ाइल का साइज़ बदल जाएगा. साथ ही, स्ट्रीमिंग मॉडल में इसका बिटरेट भी बदल जाएगा.

इसे समझने के लिए, हमने हर बिटरेट मोड से एक उदाहरण लिया है और उसमें सिर्फ़ रीस्केलिंग पैरामीटर जोड़े हैं.

Q मोड
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 0 -crf 10 -quality good \
  -speed 0 -vf scale=640x480 -c:a libvorbis 640x480_Q_crf_10_120s_tears_of_steel_1080p.webm
CQ मोड
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1500k -maxrate 2500k -crf 10 -vf scale=640x480 -c:a libvorbis \
  640x480_CQ_crf_0_120s_tears_of_steel_1080p.webm
वीबीआर मोड
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1500k -maxrate 2500k -quality good -speed 5 -vf  scale=640x480 \
  -c:a libvorbis 640x480_VBR_good_5_120s_tears_of_steel_1080p.webm
CBR मोड
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 2000k -maxrate 2000k -quality realtime -speed 5 -vf  scale=640x480 \
  -c:a libvorbis 640x480_CBR_2000_realtime_5_120s_tears_of_steel_1080p.webm

रीस्केलिंग के नतीजों की टेबल

फ़ाइल कोड में बदलने में लगने वाला समय (मिनटों में) डिस्क पर फ़ाइल का साइज़
640x480_Q_crf_10_120s_tears_of_steel_1080p.webm 5 3.4 एमबी
640x480_CQ_crf_0_120s_tears_of_steel_1080p.webm 2 22.4MB
640x480_VBR_good_5_120s_tears_of_steel_1080p.webm 1 22.6 एमबी
640x480_CBR_2000_realtime_5_120s_tears_of_steel_1080p.webm 4 23 एमबी

तुलना करने में आसानी हो, इसलिए ये हमारी पिछली फ़ाइलों के उदाहरणों से लिए गए FFmpeg के वही निर्देश हैं. हालांकि, इनमें स्केलिंग नहीं की गई है:

फ़ाइल कोड में बदलने में लगने वाला समय (मिनटों में) डिस्क पर फ़ाइल का साइज़
Q_crf_10_120s_tears_of_steel_1080p.webm 56 126MB
CQ_2500_1500_crf_10_120s_tears_of_steel_1080p.webm 9 24.1 एमबी
VBR_good_5_120s_tears_of_steel_1080p.webm 4 23.9 एमबी
CBR_2000_realtime_speed_5_120s_tears_of_steel_1080p.webm 1 24.8MB

जैसा कि आपको दिखेगा, हर फ़ाइल के आउटपुट फ़ाइल साइज़ में काफ़ी कमी आई है. साथ ही, ज़्यादातर उदाहरणों में एन्कोड करने में लगने वाले समय में कमी आई है. हालांकि, Q मोड में एन्कोड करने में लगने वाला समय बढ़ गया है. वीडियो को "ज़्यादा" कंप्रेस करने के लिए ज़्यादा मेहनत करनी पड़ती है. इसलिए, भले ही क्वालिटी मोड में आउटपुट फ़ाइल का साइज़ छोटा हो, लेकिन इसे बनाने में ज़्यादा समय लग सकता है. यह न मानें कि एन्कोडिंग की प्रोसेस से, छोटी फ़ाइल हमेशा ज़्यादा तेज़ी से डिलीवर की जा सकती है.

बिटरेट को एक साथ कम करना और रीस्केल करना

तुलना के लिए, यहां दिए गए उदाहरणों में सीक्यू, वीबीआर, और सीबीआर के उदाहरणों को फिर से चलाया गया है. हालांकि, इस बार हमने टारगेट बिटरेट को 500 केबीपीएस के लेवल पर सीमित कर दिया है. यह इमेज के साइज़ को कम करने के हिसाब से, करीब एक चौथाई है.

CQ मोड
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 500k \
  -minrate 350k -maxrate 550k -crf 10 -vf scale=640x480 -c:a libvorbis \
  640x480_CQ_crf_0_120s_tears_of_steel_1080p.webm
वीबीआर मोड
ffmpeg -i "120s_tears_of_steel_1080p.webm" -c:v libvpx-vp9 -b:v 500k \
  -minrate 350k -maxrate 500k -quality good -speed 5 -vf scale=640x480 -c:a libvorbis \
  640x480_VBR_good_5_120s_tears_of_steel_1080p.webm
CBR मोड
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 500k \
  -minrate 500k -maxrate 500k -quality realtime -speed 5 -vf scale=640x480 -c:a libvorbis \
  640x480_CBR_2000_realtime_5_120s_tears_of_steel_1080p.webm

रीस्केलिंग और टारगेट बिटरेट कम करने के नतीजों की टेबल

फ़ाइल कोड में बदलने में लगने वाला समय (मिनटों में) डिस्क पर फ़ाइल का साइज़
640x480_CQ_500_crf_0_120s_tears_of_steel_1080p.webm 1 7 एमबी
640x480_VBR_500_good_5_120s_tears_of_steel_1080p.webm 1 7 एमबी
640x480_CBR_500_realtime_5_120s_tears_of_steel_1080p.webm 1 7.6 एमबी

जैसा कि आप देख सकते हैं, अब वीडियो को एन्कोड करने में और भी कम समय लगता है.