الغرض

يقدم هذا القسم اقتراحات لإعدادات ترميز VP9 عند تنفيذ الترميز المستند إلى ملف (أي غير معروض).

تم تصميم هذه الاقتراحات للأهداف التالية:

  • التوازن بين الجودة وسرعة الترميز
  • الحد الأدنى لمعدل نقل البيانات لتحقيق جودة معقولة
  • الإعدادات لاستيعاب مجموعة كبيرة من أنواع المحتوى

لا تشمل هذه الاقتراحات ما يلي:

  • الترميز المباشر للعنوان
  • التحسين لعرض أنواع معيّنة من المحتوى (مثل اللقطات الرياضية ذات الحركة العالية)
  • ضبط الإعدادات لمتطلبات جهاز أو شبكة محددة

ترميز بدرجة دقة واحدة

ويتوافق برنامج VP9 مع مجموعة من أحجام الإطارات، بداية من درجات الدقة الصغيرة وحتى 4K. وتمنح أحجام الإطارات الأكبر حجمًا جودة أعلى، إلا أنها تتطلب المزيد من معدل نقل البيانات لتقديمها، فضلاً عن مزيد من طاقة المعالجة لفك التشفير.

إذا كنت تنشئ درجة دقة واحدة، فمقعد 640 × 480 هو الحل الآمن لمجموعة واسعة من أجهزة الويب والأجهزة الجوّالة. تتيح لك معلمات سطر الأوامر 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 في مختلف درجات الدقة.

يمكن استخدام كل الإعدادات أدناه لملفات فردية بدرجات دقة مختلفة، مجتمعةً يتم توفير مجموعة شاملة مناسبة للبث التكيُّفي. تجدر الإشارة إلى أن الإصدار 640×480 له نسختان، جودة منخفضة (LQ) وأخرى ذات جودة متوسطة (MQ).

معدل نقل البيانات

ننصح باستخدام وضع الجودة المشروطة (CQ) عند ترميز ملفات VP9 لعرضها عند الطلب. يسمح لك وضع الترميز هذا بتحديد متوسط معدل نقل البيانات المستهدف مع التحكّم في الحدّ الأقصى لجودة الفيديو والحدّ الأدنى والحدّ الأقصى لمعدّل نقل البيانات.

يتم اقتراح معدلات نقل البيانات التالية كأساسيات للتوزيع على الويب والأجهزة الجوّالة. تقلل هذه الاقتراحات من معدل نقل البيانات الذي يحقّق جودة فيديو مناسبة لتوزيع الويب وعلى الأجهزة الجوّالة على حدّ سواء. اعتبِر هذه الاقتراحات اقتراحًا منخفضًا بمعدّل نقل بيانات لا يزال بالإمكان تحقيق جودة معقولة.

وبالنسبة إلى الأمثلة الواردة أعلاه، ننصحك بإعداد الحدّ الأدنى لمعدّل نقل البيانات على 50% من معدل نقل البيانات المستهدَف، و145% كحد أقصى من الهدف.

حجم الإطار/عدد اللقطات في الثانية معدل نقل البيانات المستهدف (VOD و كيلوبت في الثانية) الحد الأدنى لمعدّل نقل البيانات (50%) الحد الأقصى لمعدل نقل البيانات (145%)
320×240 بكسل بسرعة 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)
1280×720 بكسل بسرعة 24,25,30 1024 512 1485
1280 × 720 بكسل بسرعة 50,60 1,800 900 2610
1920 × 1080 بكسل بسرعة 24,25,30 1,800 900 2610
1920 × 1080 بكسل بسرعة 50,60 3,000 1500 4350
2560 × 1440 بكسل بسرعة 24,25,30 6000 3,000 8700
2560 × 1440 بكسل بسرعة 50,60 9000 4500 13050
3840 × 2160 بكسل بسرعة 24,25,30 12000 6000 17400
3840 × 2160 بكسل بسرعة 50,60 18000 9000 26100

الشكل 2أ: معدلات نقل البيانات المقترَحة عند الطلب

في نظام التشغيل FFmpeg، يتم التحكم في معدل نقل البيانات باستخدام الأوامر التالية:

FFmpeg
-b:v <arg> لضبط معدل نقل البيانات (مثلاً 500 ألف)
-minrate <arg>
-maxrate <arg>
إعداد الحد الأدنى والحد الأقصى لمعدل نقل البيانات.

على سبيل المثال، عند ترميز محتوى بحجم 640x480، يمكنك استخدام سطر الأوامر -b:v 750k -minrate 375 -maxrate 1088.

الجودة

في وضع CQ، ستضبط أيضًا الحد الأقصى لمستوى الجودة. ننصح باستخدام مستويات الجودة التالية لترميز VP9 المستند إلى ملف:

ارتفاع الإطار الجودة المستهدفة (CQ)
٢٤٠ 37
360 36
480 34 (LQ) أو 33 (MQ)
720 32
1080 31
1440 24
2160 15

في FFmpeg، يتم ضبط الجودة باستخدام الأمر -crf. على سبيل المثال، لضبط الجودة على 33، يتم استخدام الأمر -crf 33

ترميز متعدد المسارات وسرعة الترميز

يسمح لك الترميز المستند إلى الملف بالمرونة في السرعة. ويمكنك أيضًا ضبط عدة بطاقات على المادة نفسها لزيادة الجودة، واختيار سرعات لكل منها.

عند ترميز ملفات VP9 في FFmpeg، ننصحك بضبط المعلَمة -quality على good ثم ضبط سرعة الوسيلة الأولى والثانية وفقًا للجدول أدناه باستخدام المَعلمة -speed. وهذا يوفّر توازنًا جيدًا بين وقت الترميز وجودة النتائج.

ارتفاع الإطار السرعة (التذكرة الأولى) السرعة (التذكرة الثانية)
٢٤٠ 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 لقطة للفيديو بين الإطارات الرئيسية (8 ثوانٍ للمحتوى الذي يبلغ 30 إطارًا في الثانية). والإطارات الرئيسية هي إطارات فيديو كافية وغير كافية، ولكنها لا تعتمد على أي إطارات أخرى لعرضها ولكنها غالبًا ما تكون أكبر من أنواع الإطارات الأخرى. للتشغيل على الويب وعلى الأجهزة الجوّالة، يتيح المسافات الكبيرة بين الإطارات الرئيسية لبرنامج الترميز اختيار أفضل موضع للإطارات الرئيسية لتحسين الجودة.

يتم التحكّم في تباعد الإطارات الرئيسية FFmpeg باستخدام الأمر -g، ما يشير إلى عدد الإطارات. بالنسبة إلى 240 لقطة، يجب أن يكون -g 240.

اقتراحات التقسيم إلى أجزاء وسلسلة محادثات

يقسّم هذا القسم إطار الفيديو إلى أعمدة متعددة، ما يؤدي إلى خفض جودة المحتوى قليلاً، ولكنّه يسرع من أداء الترميز. يجب أن يكون عرض المربعات 256 بكسل على الأقل، لذلك هناك حد لعدد المربّعات التي يمكن استخدامها.

وبناءً على عدد المربّعات ودرجة دقة إطار الإخراج، قد تكون المزيد من سلاسل محادثات وحدة المعالجة المركزية مفيدة. وبصفة عامة، هناك قيمة محدودة لسلاسل محادثات متعددة عندما يكون حجم إطار الناتج صغيرًا جدًا.

يُنصَح باستخدام الإعدادات التالية للتقسيم إلى أجزاء وسلسلة محادثات بدرجات دقة مختلفة.

حجم الإطار عدد أعمدة العمود عدد سلاسل المحادثات
320x240 1 (-tile-columns 0) 2
640‏x‏360 2 (-tile-columns 1) 4
640×480 2 (-tile-columns 1) 4
1280‏x‏720 4 (-tile-columns 2) 8
1920‏x‏1080 4 (-tile-columns 2) 8
2560x1440 8 (-tile-columns 3) 16
3840 × 2160 8 (-tile-columns 3) 16

في بروتوكول FFmpeg، يتم التحكم في عدد المربّعات بواسطة المعلمة -tile-columns وعدد سلاسل المحادثات حسب -threads. على سبيل المثال، سيستخدم ترميز 640×480 سطر الأوامر -tile-columns 2 -threads 4.

خطوط أوامر FFmpeg

وقد تم جمع الأوامر السابقة معًا، ويمكن استخدام أوامر FFmpeg التالية لترميز محتوى VP9.

تجدُر الإشارة إلى أنّه يتم تتبّع أمرَي المرور الأول والعكس معًا. تُجيب الوسيطة -y في أمر المرور الثاني على &quot؛نعم" عندما يطلب FFmpeg استبدال ملف إحصاءات المسافة الأولى مع فيديو الإخراج.

لاحظ أيضًا أنه يتم استخدام المصدر بدقة 1080p لترميز الإعلانات التي تستهدف إخراجًا بدقة 1280x720. ويتم استخدام مصدر بدقة 4k للحصول على إخراج أكبر.

320×240 (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 2 \
  -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 2 \
  -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 1 -y tos-320x240.webm

640×360 (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 4 \
  -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 4 \
  -quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-640x360.webm

640×480 (جودة منخفضة، 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 4 \
  -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 4 \
  -quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-640x480-low.webm

640×480 (جودة متوسطة، 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 4 \
  -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 4 \
  -quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-640x480-medium.webm

1280×720 (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 8 \
  -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 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-1280x720-24-30fps.webm

1280×720 (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 8 \
  -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 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4-y tos-1280x720-50-60fps.webm

1920 × 1080 (24 أو 25 أو 30 إطارًا في الثانية)

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

1920 × 1080 (50 أو 60 إطارًا في الثانية)

ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
  -minrate 1500k -maxrate 4350k -tile-columns 2 -g 240 -threads 8 \
  -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 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -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 16 \
  -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 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -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 16 \
  -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 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-2560x1440-50-60fps.webm

3840 × 2160 (24 أو 25 أو 30 إطارًا في الثانية)

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

3840 × 2160 (50 أو 60 إطارًا في الثانية)

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