बेसिक एन्कोडिंग

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

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

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

A Simple Encode

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

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 के लिए कहा था.

रिज़ॉल्यूशन

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

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

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

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

उदाहरण के लिए, यहां दिया गया FFmpeg कमांड, CQ मोड का इस्तेमाल करके 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 पर सेट किया गया है. स्पीड सेटिंग 0-4, good और best में VoD के लिए लागू होती हैं. इनमें 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

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