ترميز HDR باستخدام VP9

تتطوّر تكنولوجيا الفيديو بنطاق عالي الديناميكية (HDR) باستمرار. هناك اليوم عدد من المعايير التي يتم توحيدها تدريجيًا.

للحصول على صورة محدّثة عن تطوّر فيديوهات HDR، يمكنك الاطّلاع على مقالة فيديو بنطاق عالي الديناميكية على Wikipedia.

يمكن استخدام FFmpeg مع VP9 من أجل (1) ضغط مصادر HDR إلى مخرجات بنطاق ديناميكي عادي (SDR) أو (2) إعادة حزم مصدر HDR إلى تنسيقات HDR متوافقة مع الويب.

مصادر الإدخال

حاليًا، عند ترميز محتوى HDR باستخدام VP9، يمكن استخدام أي برامج ترميز عالية العمق (10 بت) متوافقة مع FFmpeg كإدخال (على سبيل المثال، VP9 Profile 2 و3 وH.264 (10 بت) وDNxHR وHEVC وProRes وغيرها). يمكنك أيضًا الاطّلاع على مقالة الدعم من YouTube بعنوان تحميل فيديوهات بنطاق عالي الديناميكية (HDR).

مدى الوصول إلى الناتج المرمّز:

في الوقت الحالي وبشكل عام، تشمل الأجهزة المستهدَفة المتوافقة أي جهاز يمكنه فك ترميز VP9 Profile 2 وعرض المحتوى على شاشة HDR.

  • ‫Chromecast Ultra + تلفزيون متوافق مع HDR
  • الإصدار 64 من Chrome Canary على نظام التشغيل Windows 10 Fall Creators Update، مع تفعيل خيار HDR (هذه أداة جيدة لتصحيح الأخطاء).
  • أي تلفزيون HDR متوافق مع VP9 Profile 2
    • جميع طُرز Samsung 2017 التي تتوافق مع النطاق العالي الديناميكية (قائمة flatpanelshd.com) وطُرز 2016 التي تبدأ بـ "KS"
    • جميع طُرز LG 2017 المتوافقة مع HDR (بعض طُرز LG G6 لعام 2016 أيضًا)
    • على الأجهزة الجوّالة، الأجهزة التي تتوافق مع فك ترميز HDR‏ 10 بت في ملف VP9 Profile 2 باستخدام تسريع الأجهزة (Meizu Pro 7)
    • UHD Bluray من 2017

إعدادات سطر الأوامر في FFmpeg لتفعيل VP9 Profile 2 وHDR EOTFs

يجب أن يكون FFmpeg قد تم إنشاؤه مع إمكانية استخدام 10 بت (أو حتى 12 بت).

في الأمثلة أدناه، نستخدم ffmpeg تم إنشاؤه بشكل ثابت مع إمكانية استخدام 10 بت. يمكنك استخدام نص الإنشاء لإنشاء النص الخاص بك، أو اتّباع الإرشادات الواردة في موقع FFmpeg الإلكتروني.

في ما يلي سطر أوامر FFmpeg صالح لترميز HDR وفقًا لمعايير SMPTE 2084 (PQ EOTF) باستخدام VP9:

ffmpeg -i strobe_scientist_18Mbps.webm -b:v 18000000 -pass 1 \
  -pix_fmt yuv420p10le \
  -color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
  -maxrate 26800000 -minrate 8040000 -profile:v 2 -vcodec libvpx-vp9 /dev/null && \
   ffmpeg -i strobe_scientist_18Mbps.webm -b:v 18000000 -pass 2 \
   -pix_fmt yuv420p10le \
   -color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
   -maxrate 26800000 -minrate 8040000 -profile:v 2 -vcodec libvpx-vp9 \
   strobe_scientist_18Mbps.webm

في ما يلي تفصيل للمَعلمات الرئيسية التي تم تقديمها هنا:

ffmpeg الإصدار الثابت المتوافق مع 10 بت
-pass 1 تتطلّب تقنية HDR ترميزًا على مرحلتَين. في هذا المثال، يتم إخراج التمريرة الأولى إلى /dev/null ومعالجتها في الذاكرة أثناء التمريرة الثانية.
-pix_fmt yuv420p10le تضبط هذه السمة تنسيق وحدات البكسل YUV 4:2:0 10-bit
-color_primaries 9 مجموعات BT2020 يُرجى الاطّلاع على الصفحتين 5 و6 من هذا المستند للحصول على مزيد من التفاصيل.
-color_trc 16 16 يضبط Transfer Characteristics على SMPTE 2084. ‫PQ 18 يضبط خصائص النقل SMPTE 2086 HLG
-colorspace 9 colorspace هي "matrix_coefficients". يجب ضبط هذه القيمة بما يتوافق مع طريقة إعداد المحتوى. (مثلاً، bt709 أو bt2020_ncl). في هذا المثال، يجب أن تكون القيمة 9 لـ bt2020_ncl. لمزيد من المعلومات، يُرجى الاطّلاع على الصفحة 12 من هذا المستند.
-color_range 1 نطاق الألوان (0 = غير محدّد، 1 = mpeg/studio/tv، 2 = jpeg/full/pc)
-profile:v 2 بالنسبة إلى HDR، يجب توفّر ملف شخصي أو 2 أو 3.
-vcodec libvpx-vp9 استخدام برنامج ترميز VP9

أمثلة على عمليات الترميز

تستخدِم الأمثلة التالية جميعها ملف المصدر strobe_scientist.mkv

بشكل عام، ننصح باستخدام معدّل نقل بيانات أعلى بنسبة %25 إلى %30 من معدّل نقل البيانات المكافئ لترميز SDR يستند إلى 8 بت عند ترميز محتوى HDR. تستهدف الأمثلة عادةً سرعة 18 ميغابت في الثانية. يمكن تحقيق نتائج جيدة بتنسيق HDR باستخدام معدّلات نقل بيانات تبلغ 12 ميغابت في الثانية مع ضبط الإعدادات على النحو الأمثل.

تم إجراء عمليات الترميز على نظام Ubuntu Linux بالمواصفات التالية:

  • المعالج: 4 معالجات Intel(R) Core(TM) i5-6500 بسرعة 3.20 غيغاهرتز
  • الذاكرة (RAM): 8060 ميغابايت (1492 ميغابايت مستخدَمة)
  • الرسومات: Intel HD Graphics 530 (Skylake GT2)
  • نظام التشغيل: Ubuntu 16.04 LTS

التحويل إلى YUV 4:2:0 10-bit PQ

المثال (أ): 6 ميغابايت في الثانية بدقة 4k ومرورَين
ffmpeg -y -report -i strobe_scientist.mkv -b:v 6000000 -speed 4 -pass 1 \
  -pix_fmt yuv420p10le \
  -color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
  -maxrate 8000000 -minrate 4000000 \
  -profile:v 2 -vcodec libvpx-vp9 -f webm /dev/null && \
  ffmpeg -y -report -i strobe_scientist.mkv -b:v 6000000 -pass 2 \
  -pix_fmt yuv420p10le \
  -color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
  -maxrate 8000000 -minrate 4000000 \
  -profile:v 2 -vcodec libvpx-vp9 \
  2pass_HDR_strobe_scientist_6Mbps-static.webm
المثال B1: 18 ميغابت في الثانية بدقة 4k ومرورَين
ffmpeg -y -report -i strobe_scientist.mkv -b:v **18000000** -speed 4 -pass 1 \
  -pix_fmt yuv420p10le \
  -color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
  -maxrate **20800000** -minrate **15040000** \
  -profile:v 2 -vcodec libvpx-vp9 -f webm /dev/null && \
  ffmpeg -y -report -i strobe_scientist.mkv -b:v 18000000 -pass 2 \
  -pix_fmt yuv420p10le \
  -color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
  -maxrate **20800000** -minrate **15040000** \
  -profile:v 2 -vcodec libvpx-vp9 \
  2pass_HDR_strobe_scientist_18Mbps-static.webm
المثال B2: 18 ميغابت في الثانية بدقة 1080p بمرورَين
ffmpeg -y -report -i strobe_scientist.mkv -b:v 18000000 -speed 4 -pass 1 \
  -pix_fmt yuv420p10le \
  -color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
  -maxrate 20800000 -minrate 15040000 \
  -profile:v 2 **-vf ****scale=-1:1080**** **-vcodec libvpx-vp9 \
  -f webm /dev/null && \
  ffmpeg -y -report -i strobe_scientist.mkv -b:v 18000000 -pass 2 \
  -pix_fmt yuv420p10le \
  -color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
  -maxrate 20800000 -minrate 15040000 \
  -profile:v 2 **-vf ****scale=-1:1080**** **-vcodec libvpx-vp9 \
  1080_2pass_HDR_strobe_scientist_18Mbps-static.webm

تحويل محتوى HDR إلى SDR باستخدام جدول بحث (LUT)

يتطلّب تحويل محتوى HDR إلى SDR أن يفهم برنامج الترميز كيف يمكن ربط مستويات السطوع والألوان بمساحة الألوان الأصغر BT.709 ونطاق السطوع غير HDR. للحصول على أفضل النتائج، يمكن استخدام جدول بحث يصف كيفية إجراء عملية الربط هذه، ويكون عادةً خاصًا بالمحتوى. يوضّح المثالان C وD كيفية استخدام جدول بحث. استخدمنا bt2020_to_bt709_example.cube

المثال C: تحويل فيديو بدقة 4K وبنطاق عالي الديناميكية إلى نطاق عادي الديناميكية بمعدل 18 ميغابت في الثانية باستخدام جدول البحث
ffmpeg -i strobe_scientist.mkv -y -b:v 18000000 -speed 4 -pass 1 \
  -pix_fmt yuv420p \
  -color_primaries 1 -color_trc 1 -colorspace 1 -color_range 1 \
  -maxrate 26800000 -minrate 8040000 -profile:v 0 \
  -vf scale=-1:-1:in_color_matrix=bt2020,format=rgb48,lut3d=bt2020_to_bt709_example.cube,scale=-1:-1:out_color_matrix=bt709 \
  -vcodec libvpx-vp9 -f webm /dev/null && \
  ffmpeg -i strobe_scientist.mkv -y -b:v 18000000 -pass 2 \
  -pix_fmt yuv420p \
  -color_primaries 1 -color_trc 1 -colorspace 1 -color_range 1 \
  -maxrate 26800000 -minrate 8040000 -profile:v 0 \
  -vf scale=-1:-1:in_color_matrix=bt2020,format=rgb48,lut3d=bt2020_to_bt709_example.cube,scale=-1:-1:out_color_matrix=bt709 \
  -vcodec libvpx-vp9 -f webm SDR_strobe_scientist_18Mbps-static.webm

تحويل HLG إلى VP9 HLG10 10-bit PQ

يتطلّب مصدر HLG. استخدمنا ملف الإدخال strobe_scientist_hlg.mkv

المثال D: 18 ميغابت في الثانية بدقة 4K وHLG بمرورَين
ffmpeg -y -i strobe_scientist_hlg.mkv -b:v 18000000 -pass 1 -speed 4 \
  -pix_fmt yuv420p10le \
  -color_primaries 9 -color_trc 18 -colorspace 9 -color_range 1 \
  -maxrate 26800000 -minrate 8040000 \
  -profile:v 2 -vcodec libvpx-vp9 -f webm /dev/null && \
  ffmpeg -y -i strobe_scientist_hlg.mkv -b:v 18000000 -pass 2 \
  -pix_fmt yuv420p10le \
  -color_primaries 9 -color_trc 18 -colorspace 9 -color_range 1 \
  -maxrate 26800000 -minrate 8040000 \
  -profile:v 2 -vcodec libvpx-vp9 \
  HLG_HDR_strobe_scientist_18Mbps-static.webm

ملخّص

تختلف أحجام ملفات الإخراج. كان حجم الملف الذي تم إدخاله 4.3 غيغابايت.

مثال الناتج المستهدَف الحجم على القرص وقت الترميز
A ‫6 ميغابت في الثانية بدقة 4K مع نطاق ديناميكي عالي غير معدَّل ‫51.2 ميغابايت 142 مليون
B1 ‫18 ميغابت في الثانية بدقة 4K بنطاق HDR بدون تغيير الحجم ‫161 ميغابايت ‫213 مليون
B2 ‫18 ميغابت في الثانية، فيديو HDR معدَّل بدقة 1080p ‫160 ميغابايت 113 مليون
C ‫18 ميغابت في الثانية من HDR إلى SDR بدون تغيير الحجم ‫165 ميغابايت 124 مليون
D تحويل HLG بمعدل 18 ميغابت في الثانية ‫165 ميغابايت 168 مليون

يُرجى العِلم أنّه يُنصح باستخدام الترميز على مرحلتَين مع محتوى HDR، لأنّ الترميز على مرحلة واحدة يمكن أن يختلف في بعض الإعدادات.

الأدوات اللازمة للإشارة إلى محتوى HDR في مخرجات WebM وMP4 (أدوات سطر الأوامر في Matroska)

في وقت كتابة هذا المستند، لا يوفّر FFmpeg آلية لتحديد البيانات الوصفية الثابتة لمعيار SMPTE 2086 في WebM/MKV، على الرغم من أنّه سينقلها من مصدر بيانات عند احتواء مصدر البيانات عليها.

يمكن استخدام أداة mkvmerge، وهي جزء من mkvtoolnix، لإدراج هذه البيانات الوصفية أو تعديلها إذا كان تطبيقك يتطلّب ذلك.

في ما يلي مثال على إدراج بيانات وصفية بتنسيق HDR في أحد الملفات التي تم إنشاؤها أعلاه. وهي مناسبة بشكل خاص لإعداد محتوى HDR لتحميله إلى YouTube.

mkvmerge \
  -o HDR_strobe_scientist_18Mbps.mkv\
  --colour-matrix 0:9 \
  --colour-range 0:1 \
  --colour-transfer-characteristics 0:16 \
  --colour-primaries 0:9 \
  --max-content-light 0:1000 \
  --max-frame-light 0:300 \
  --max-luminance 0:1000 \
  --min-luminance 0:0.01 \
  --chromaticity-coordinates 0:0.68,0.32,0.265,0.690,0.15,0.06 \
  --white-colour-coordinates 0:0.3127,0.3290 \
  HDR_strobe_scientist_18Mbps.webm

ينتج هذا المثال الملف HDR_strobe_scientist_18Mbps.mkv في 0.6 ثانية.