मकसद

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

इन सुझावों को इन लक्ष्यों को ध्यान में रखकर बनाया गया है:

  • क्वालिटी और एन्कोडिंग की स्पीड के बीच संतुलन
  • बेहतर क्वालिटी पाने के लिए कम से कम बिट रेट
  • अलग-अलग तरह के कॉन्टेंट के लिए सेटिंग

इन सुझावों में ये शामिल नहीं हैं:

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

सिंगल रिज़ॉल्यूशन एन्कोडिंग

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

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

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

मल्टी-रिज़ॉल्यूशन एन्कोडिंग

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

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

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

नीचे दी गई सभी सेटिंग का इस्तेमाल, अलग-अलग रिज़ॉल्यूशन वाली फ़ाइलों के लिए किया जा सकता है. इन सभी सेटिंग को मिलाकर, अडैप्टिव स्ट्रीमिंग के लिए सही सेट तैयार किया जाता है. ध्यान दें कि 640x480 वर्शन के दो वर्शन होते हैं. एक लो क्वालिटी (एलक्यू) और दूसरा मीडियम क्वालिटी (एमक्यू).

बिटरेट

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

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

ऊपर दिए गए उदाहरणों के लिए, हमारा सुझाव है कि कम से कम बिटरेट को टारगेट बिटरेट के 50% पर सेट किया जाए और ज़्यादा से ज़्यादा बिटरेट को टारगेट बिटरेट के 145% पर सेट किया जाए.

फ़्रेम साइज़/फ़्रेम रेट टारगेट बिटरेट (वीओडी, केबीपीएस) कम से कम बिटरेट (50%) ज़्यादा से ज़्यादा बिटरेट (145%)
320x240 पिक्सल @ 24,25,30 150 75 218
640x360 पिक्सल @ 24,25,30 276 138 400
640x480 पिक्सल @ 24,25,30 512 (LQ), 750 (MQ) 256 (LQ) 375 (MQ) 742 (LQ) 1088 (MQ)
1280x720p @ 24,25,30 1024 512 1485
1280x720 पिक्सल @ 50,60 1800 900 2610
1920x1080 पिक्सल @ 24,25,30 1800 900 2610
1920x1080 पिक्सल @ 50,60 3000 1500 4350
2560x1440 पिक्सल @ 24,25,30 6000 3000 8700
2560x1440 पिक्सल @ 50,60 9000 4500 13050
3840x2160 पिक्सल @ 24,25,30 12000 6000 17400
3840x2160 पिक्सल @ 50,60 18000 9000 26100

दूसरी इमेज: वीओडी के लिए सुझाए गए बिटरेट

FFmpeg में, बिट रेट को इन कमांड की मदद से कंट्रोल किया जाता है:

FFmpeg
-b:v <arg> बिटरेट सेट करता है (जैसे, 500k)
-minrate <arg>
-maxrate <arg>
कम से कम और ज़्यादा से ज़्यादा बिटरेट सेट करता है.

उदाहरण के लिए, 640x480 कॉन्टेंट को कोड में बदलने के लिए, कमांड-लाइन -b:v 750k -minrate 375 -maxrate 1088 का इस्तेमाल किया जा सकता है.

क्वालिटी

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

फ़्रेम की ऊंचाई टारगेट क्वालिटी (सीक्यू)
240 37
360 36
480 34 (LQ) या 33 (MQ)
720 32
1080 31
1440 24
2160 15

FFmpeg में, क्वालिटी को -crf कमांड से सेट किया जाता है. उदाहरण के लिए, क्वालिटी को 33 पर सेट करने के लिए, -crf 33 कमांड का इस्तेमाल किया जाएगा

मल्टी-पास एन्कोडिंग और एन्कोडिंग की स्पीड

फ़ाइल पर आधारित एन्कोडिंग से, आपको स्पीड के मामले में सुविधा मिलती है. क्वालिटी बढ़ाने के लिए, एक ही मटीरियल पर कई पास किए जा सकते हैं. साथ ही, हर पास के लिए स्पीड चुनी जा सकती है.

FFmpeg में VP9 फ़ाइलों को एन्कोड करते समय, -quality पैरामीटर को good पर सेट करने का सुझाव दिया जाता है. इसके बाद, -speed पैरामीटर के साथ नीचे दी गई टेबल के हिसाब से, पहले और दूसरे पास की स्पीड सेट करें. इससे एन्कोडिंग के समय और आउटपुट की क्वालिटी के बीच बेहतर संतुलन बनता है.

फ़्रेम की ऊंचाई स्पीड (इंटरव्यू पास कर चुके लोग) स्पीड (सेकंड पास)
240 4 1
360 4 1
480 4 1
720 4 2
1080 4 2
1440 4 2
2160 4 2

उदाहरण के लिए, FFmpeg में पहली बार पास की गई एन्कोड स्ट्रिंग में -quality good -speed 4 शामिल हो सकता है.

मुख्य-फ़्रेम के बीच की दूरी

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

FFmpeg में, कीफ़्रेम के बीच की दूरी को -g कमांड से कंट्रोल किया जाता है. इससे फ़्रेम की संख्या का पता चलता है. 240 फ़्रेम के लिए, यह -g 240 होगा.

टाइलिंग और थ्रेडिंग के सुझाव

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

टाइलों की संख्या और आउटपुट फ़्रेम के रिज़ॉल्यूशन के आधार पर, ज़्यादा सीपीयू थ्रेड काम आ सकती हैं. आम तौर पर, आउटपुट फ़्रेम का साइज़ बहुत छोटा होने पर, कई थ्रेड का इस्तेमाल करने से कोई फ़ायदा नहीं होता.

अलग-अलग रिज़ॉल्यूशन पर टाइलिंग और थ्रेडिंग के लिए, यहां दी गई सेटिंग का सुझाव दिया गया है.

फ़्रेम का साइज़ टाइल-कॉलम की संख्या थ्रेड की संख्या
320x240 1 (-tile-columns 0) 1
640x360 2 (-tile-columns 1) 2
640x480 2 (-tile-columns 1) 2
1280x720 4 (-tile-columns 2) 4
1920x1080 4 (-tile-columns 2) 4
2560x1440 8 (-tile-columns 3) 8
3840x2160 8 (-tile-columns 3) 8

FFmpeg में, टाइल की संख्या को -tile-columns पैरामीटर से कंट्रोल किया जाता है. वहीं, थ्रेड की संख्या को -threads से कंट्रोल किया जाता है. उदाहरण के लिए, 640x480 एन्कोड करने के लिए, कमांड-लाइन -tile-columns 1 -threads 2 का इस्तेमाल किया जाएगा.

FFmpeg कमांड लाइन

ऊपर दिए गए सुझावों के आधार पर, VP9 कॉन्टेंट को एन्कोड करने के लिए, FFmpeg के इन निर्देशों का इस्तेमाल किया जा सकता है.

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

यह भी ध्यान दें कि 1280x720 तक के आउटपुट को टारगेट करने वाले एनकोड के लिए, 1080 पिक्सल के सोर्स का इस्तेमाल किया जाता है. बड़े आउटपुट के लिए, 4K सोर्स का इस्तेमाल किया जाता है.

320x240 (24, 25 या 30 फ़्रेम प्रति सेकंड)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=320x240 -b:v 150k \
  -minrate 75k -maxrate 218k -tile-columns 0 -g 240 -threads 1 \
  -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-320x240.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=320x240 -b:v 150k \
  -minrate 75k -maxrate 218k -tile-columns 0 -g 240 -threads 1 \
  -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 1 -y tos-320x240.webm

640x360 (24, 25 या 30 फ़्रेम प्रति सेकंड)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x360 -b:v 276k \
  -minrate 138k -maxrate 400k -tile-columns 1 -g 240 -threads 2 \
  -quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-640x360.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x360 -b:v 276k \
  -minrate 138k -maxrate 400k -tile-columns 1 -g 240 -threads 2 \
  -quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 1 -y tos-640x360.webm

640x480 (कम क्वालिटी, 24, 25 या 30 फ़्रेम प्रति सेकंड)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 512k \
  -minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 2 \
  -quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-640x360-low.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 512k \
  -minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 2 \
  -quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 1 -y tos-640x480-low.webm

640x480 (मीडियम क्वालिटी, 24, 25 या 30 फ़्रेम प्रति सेकंड)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 750k \
  -minrate 375k -maxrate 1088k -tile-columns 1 -g 240 -threads 2 \
  -quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-640x360-medium.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 750k \
  -minrate 375k -maxrate 1088k -tile-columns 1 -g 240 -threads 2 \
  -quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 1 -y tos-640x480-medium.webm

1280x720 (24, 25 या 30 फ़्रेम प्रति सेकंड)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1024k \
  -minrate 512k -maxrate 1485k -tile-columns 2 -g 240 -threads 4 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1280x720-24-30fps.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1024k \
  -minrate 512k -maxrate 1485k -tile-columns 2 -g 240 -threads 4 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -y tos-1280x720-24-30fps.webm

1280x720 (50 या 60 फ़्रेम प्रति सेकंड)

ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 4 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1280x720-50-60fps.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 4 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2-y tos-1280x720-50-60fps.webm

1920x1080 (24, 25 या 30 फ़्रेम प्रति सेकंड)

ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 4 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1920x1080-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 1800k \
  -minrate 900k -maxrate 2610k -tile-columns 3 -g 240 -threads 4 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -y tos-1920x1080-24-30fps.webm

1920x1080 (50 या 60 फ़्रेम प्रति सेकंड)

ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
  -minrate 1500k -maxrate 4350k -tile-columns 2 -g 240 -threads 4 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-1920x1080-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
  -minrate 1500k -maxrate 4350k -tile-columns 3 -g 240 -threads 4 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -y tos-1920x1080-50-60fps.webm

2560x1440 (24, 25 या 30 फ़्रेम प्रति सेकंड)

ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 6000k \
  -minrate 3000k -maxrate 8700k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-2560x1440-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 6000k \
  -minrate 3000k -maxrate 8700k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -y tos-2560x1440-24-30fps.webm

2560x1440 (50 या 60 फ़्रेम प्रति सेकंड)

ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
  -minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-2560x1440-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
  -minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -y tos-2560x1440-50-60fps.webm

3840x2160 (24, 25 या 30 फ़्रेम प्रति सेकंड)

ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 12000k \
  -minrate 6000k -maxrate 17400k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-3840x2160-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 12000k \
  -minrate 6000k -maxrate 17400k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 2 -y tos-3840x2160-24-30fps.webm

3840x2160 (50 या 60 फ़्रेम प्रति सेकंड)

ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
  -minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 8 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 1 -speed 4 tos-3840x2160-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
  -minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 8 \
  -quality good -speed 2 -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -y tos-3840x2160-50-60fps.webm