الغرض

يقدّم هذا القسم اقتراحات بشأن إعدادات ترميز 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 يتضمّن إصدارَين، أحدهما بجودة منخفضة (LQ) والآخر بجودة متوسطة (MQ).

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

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

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

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

حجم اللقطة/عدد اللقطات في الثانية معدّل نقل البيانات المستهدف (الفيديو عند الطلب، كيلوبت في الثانية) الحدّ الأدنى لمعدّل نقل البيانات (50%) الحدّ الأقصى لمعدّل نقل البيانات (145%)
‫320x240p بسرعة 24 أو 25 أو 30 لقطة في الثانية 150 75 218
‫640x360p بسرعة 24 و25 و30 لقطة في الثانية 276 138 400
‫640x480p بسرعة 24 و25 و30 لقطة في الثانية ‫512 (LQ)، و750 (MQ) ‫256 (جودة منخفضة) 375 (جودة متوسطة) 742 (LQ) 1088 (MQ)
‫1280x720p بسرعة 24 أو 25 أو 30 لقطة في الثانية 1024 512 1485
‫1280x720p بسرعة 50 أو 60 لقطة في الثانية 1,800 900 2610
‫1920x1080p بسرعة 24 أو 25 أو 30 لقطة في الثانية 1,800 900 2610
‫1920x1080p بسرعة 50 أو 60 لقطة في الثانية 3000 1500 4350
‫2560x1440p بسرعة 24 أو 25 أو 30 لقطة في الثانية 6000 3000 8700
‫2560x1440p بسرعة 50 أو 60 لقطة في الثانية 9000 4500 13050
3840x2160p @ 24,25,30 12000 6000 17400
‫3840x2160p @ 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)
240 37
360 36
480 ‫34 (جودة منخفضة) أو 33 (جودة متوسطة)
720 32
1080 31
1440 24
2160 15

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

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

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

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

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

اقتراحات بشأن التقسيم إلى مربّعات والتقسيم إلى أجزاء

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

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

يُنصح باستخدام الإعدادات التالية لتقسيم الصور إلى مربعات وتجميعها في سلاسل بدقة عرض مختلفة.

حجم الإطار Number of tile-columns عدد سلاسل المحادثات
320×240 ‫1 (-tile-columns 0) 1
640‏x‏360 ‫2 (-tile-columns 1) 2
640×480 ‫2 (-tile-columns 1) 2
1280‏x‏720 4 (-tile-columns 2) 4
1920‏x‏1080 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

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

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

يُرجى العِلم أيضًا أنّه يتم استخدام مصدر بدقة 1080p لعمليات الترميز التي تستهدف دقة عرض تصل إلى 1280x720. يتم استخدام مصدر بدقة 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

‫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 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