कोड में बदलने का बुनियादी तरीका

वीडियो कंप्रेस करने से जुड़ी बुनियादी बातें

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

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

एक आसान एन्कोडर

नीचे दिया गया FFmpeg निर्देश, इनपुट फ़ाइल को VP9 वीडियो में Opus ऑडियो के साथ बदलता है. यह सबसे आसान संभावित एन्कोडिंग है, जो डिफ़ॉल्ट सेटिंग का इस्तेमाल करता है.

ffmpeg -i tears_of_steel_1080p.webm -c:v libvpx-vp9 -c:a libopus output.webm

यह FFmpeg कोड नीचे दिए गए कमांड लाइन पैरामीटर का इस्तेमाल करता है:

Ffmpeg
-i <filename> इनपुट फ़ाइल का नाम बताता है
-c:v libvpx-vp9 FFmpeg को VP9 वीडियो बनाने के लिए कहो
-c:a libopus FFmpeg को Opus ऑडियो बनाने के लिए कहते हैं
output.webm आउटपुट फ़ाइल का नाम बताता है

FFmpeg उस आउटपुट फ़ाइल के नाम से फ़ाइल बनाने के लिए अनुमान लगाता है जिसका आप इस्तेमाल करते हैं. इस उदाहरण में, FFmpeg एक WebM फ़ाइल दिखाएगा, क्योंकि हमने output.webm मांगा था.

रिज़ॉल्यूशन

हर वीडियो में फ़्रेम का साइज़ होता है (इससे पिक्सल की चौड़ाई और ऊंचाई का पता चलता है). नीचे दिए गए FFmpeg कमांड-लाइन पैरामीटर का इस्तेमाल करके, VP9 एन्कोडिंग के लिए आउटपुट वीडियो के फ़्रेम साइज़ को कंट्रोल किया जा सकता है:

Ffmpeg
-vf scale=<width>x<height> फ़्रेम की चौड़ाई और ऊंचाई

उदाहरण के लिए, नीचे दिए गए FFmpeg निर्देश से 640x480 VP9 वाला WebM वीडियो आउटपुट होगा.

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -c:v libvpx-vp9 -c:a libopus output.webm

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

बिटरेट (बिट रेट)

VP9 कई अलग-अलग बिटरेट मोड के साथ काम करता है:

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

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

Ffmpeg
-b:v <arg> टारगेट बिटरेट सेट करता है (उदाहरण के लिए, 500k)
-minrate <arg>
-maxrate <arg>
कम से कम और ज़्यादा से ज़्यादा बिटरेट सेट करता है.
-crf <arg> क्वालिटी लेवल सेट करता है. मान्य वैल्यू 0-63 है और कम संख्या ज़्यादा अच्छी है.

उदाहरण के लिए, नीचे दिए गए FFmpeg निर्देश से क्यूक्यू मोड का इस्तेमाल करके मीडियम-क्वालिटी वाली 640x480 वीडियो फ़ाइल बनाई जाएगी. इसमें औसत 750 केबीपीएस बिटरेट और ज़्यादा से ज़्यादा क्वालिटी 33 तक सीमित होगी.

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -b:v 750k -crf 33 -c:v libvpx-vp9 -c:a libopus output.webm

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

क्वालिटी और स्पीड की सेटिंग

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

क्वालिटी और स्पीड के बीच संतुलन बनाने के लिए, VP9 कई सेटिंग देता है:

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

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

इन दो तरह की सेटिंग को कई कमांड लाइन पैरामीटर से कंट्रोल किया जाता है:

Ffmpeg
-threads एन्कोडिंग के दौरान इस्तेमाल किए जाने वाले थ्रेड की संख्या बताता है.
-quality इसे good, best या realtime पर सेट किया जा सकता है
-speed इस पैरामीटर का मतलब अलग-अलग हो सकता है. यह इस बात पर निर्भर करता है कि क्वालिटी को good पर सेट किया गया है या realtime पर. good और best में VoD के लिए, स्पीड सेटिंग 0-4 लागू होती है. 0 की क्वालिटी सबसे अच्छी होती है और 4 सबसे कम होता है. Realtime मान्य वैल्यू 5-8 हैं; कम संख्या का मतलब है बेहतर क्वालिटी
-tile-columns टाइल लगाने से वीडियो को आयताकार क्षेत्रों में बांट दिया जाता है. इससे कोडिंग और डीकोड करने के लिए कई थ्रेड की सुविधा मिल जाती है. टाइल की संख्या हमेशा दो की घात होती है. 0=1 टाइल, 1=2, 2=4, 3=8, 4=16, 5=32.

यह FFmpeg निर्देश, 640x480 साइज़ की फ़ाइल बनाएगा, जिसकी क्वालिटी 'good' और रफ़्तार 0 पर सेट होगी (अच्छी क्वालिटी):

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -b:v 750k -quality good -speed 0 -crf 33 -c:v libvpx-vp9 -c:a libopus \
  output.webm

क्वालिटी और स्पीड सेटिंग के हिसाब से आपके विकल्प अलग-अलग हो सकते हैं. यह आपके रिज़ॉल्यूशन और उपलब्ध प्रोसेसिंग पावर पर निर्भर करता है. सुझावों का एक पूरा सेट अगले सेक्शन में देखा जा सकता है.