קידוד HDR ב-VP9

וידאו בטווח דינמי גבוה (HDR) הוא טכנולוגיה למבוגרים בלבד. כיום יש כמה סטנדרטים ההרמונים בהדרגה.

לקבלת תמונה תמידית של התפתחות סרטוני ה-HDR, עיינו במאמר ב-WikiPedia סרטון בטווח דינמי גבוה.

אפשר להשתמש ב-FFmpeg בשילוב עם VP9 כדי (1) לדחוס מקורות HDR לפלט סטנדרטי לטווח דינמי (SDR) או (2) כדי לארוז מחדש מקור HDR לפורמט ידידותי לאינטרנט.

מקורות קלט

כרגע, בעת קידוד HDR באמצעות VP9, אפשר להשתמש ברכיבי Codec של עומק ביט גדול (10 סיביות) נתמך על ידי FFmpeg כקלט (לדוגמה, פרופיל VP9 2 ו-3, H.264 (10 סיביות), DNxHR, HEVC, ProRes וכו'.). אפשר גם לעיין במאמר התמיכה של YouTube יש להעלות סרטונים בטווח דינמי גבוה (HDR).

פוטנציאל חשיפה מקודד:

נכון לעכשיו, באופן כללי, מכשירי יעד נתמכים כוללים כל מכשיר שיכול לפענח את פרופיל VP9 2 ולפלט דרך מסך HDR.

  • Chromecast Ultra + טלוויזיה עם תמיכה ב-HDR
  • Chrome 64 Canary ב-Windows 10 – עדכון סתיו, עם סימון HDR מופעל. (זהו כלי טוב לניפוי באגים).
  • כל טלוויזיה ב-HDR עם פרופיל VP9 2
    • כל דגמי ה-HDR 2017 של Samsung (רשימה של Flatpanelshd.com) ודגמים של 2016 החל מ-"KS"
    • כל דגמי ה-LG 2017 באיכות HDR (כולל דגמים מסוימים של LG G6 משנת 2016)
    • בנייד, מכשירים שתומכים בפרופיל VP9 מואצת עם חומרה 20 פענוח של HDR בנפח 10 סיביות (Meizu Pro 7)
    • טשטוש UHD משנת 2017

הגדרות של שורת פקודה ב-FFmpeg כדי להפעיל את פרופיל VP9 2 ו-HDR EOTF

יש צורך ב-FFmpeg עם תמיכה ב-10 ביט (או 12 ביטים).

בדוגמאות הבאות אנחנו משתמשים ב-ffmpeg באופן סטטי עם תמיכה ב-10 ביט. תוכלו להשתמש בסקריפט של build כדי ליצור סקריפט משלכם, או לפעול לפי ההנחיות באתר 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 גרסת build סטטית עם תמיכה ב-10 סיביות
-pass 1 איכות HDR מצריכה קידוד דו-שלבי. בדוגמה הזו, הכרטיס הראשון מפלט אל /dev/null ומעובד בזיכרון במהלך הכרטיס השני.
-pix_fmt yuv420p10le הגדרת פורמט YUV 4:2:0 של 10 סיביות
-color_primaries 9 מגדיר את BT2020 למידע על עמוד 5 ו-6 במסמך הזה לקבלת פרטים נוספים.
-color_trc 16 16 מגדיר את מאפייני ההעברה ל-SMPTE 2084. PQ 18 מגדיר את מאפייני ההעברה SMPTE 2086 HLG
-colorspace 9 colorspace הוא "Mattrix_coeffectives." הערך אמור להיות תואם לאופן שבו התוכן נרכש. (למשל: 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

כהערה כללית על קצבי העברת נתונים עם קידוד HDR, מומלץ להשתמש בקצב העברת נתונים גבוה ב-25%-30% מהקידוד שווה ערך ל-SDR ב-8 ביט. הדוגמאות בדרך כלל מיועדות ל-18Mbps. ניתן להשיג תוצאות HDR טובות באמצעות קצב העברת נתונים של 12Mbps באמצעות כוונון אופטימלי.

המקודדים בוצעו במערכת Linux Linux עם המפרט הבא:

  • מעבד: 4x Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz
  • זיכרון (RAM): 8,060MB (1492MB)
  • גרפיקה: Intel HD Graphics 530 (Skylake GT2)
  • מערכת הפעלה: Ubuntu 16.04 LTS

המרה ל-YUV 4:2:0 בגרסת PQ של 10 סיביות

דוגמה א': 6Mbps 4k 2-pass
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: 18Mbps 4k 2-pass
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: 18Mbps 1080p 2-pass
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. לקבלת התוצאות הטובות ביותר, אפשר להשתמש ב טבלת LUT שמתארת את אופן ביצוע המיפוי – בדרך כלל ספציפי לתוכן. דוגמאות ג' ו-ד' מראות איך להשתמש ב טבלת LUT. השתמשנו בפורמט bt2020_to_bt709_example.cube

דוגמה C: 18Mbps 4k ל-SDR עם LUT
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 בגרסת PQ

יש צורך במקור HLG. השתמשנו בקובץ הקלט strobe_scientist_hlg.mkv

דוגמה D: 18Mbps 4K 2-Pass 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.3GB.

דוגמה פלט יעד גודל בדיסק זמן קידוד
A HDR 4K ללא שינוי 51.2MB 142 מ'
ב' 1 HDR ברזולוציית 4K ללא שינוי 161MB 213 מ'
ב' 2 HDR בסולם של 18Mbps ו-1080 160MB 113 מ'
C 18 Mbps HDR ל-SDR ללא שינוי 165MB 124 מ'
D המרה מסוג HLG בנפח 18Mbps 165MB 168 מ'

הערה: מומלץ להשתמש בקידוד דו-שלבי ב-HDR, מכיוון שמעבר אחד יכול להשתנות בהתאם לתצורות מסוימות.

כלים הנחוצים כדי לסמן HDR בפלט WebM ו-MP4 (כלים בשורת הפקודה של Matroka)

בזמן הכתיבה, אין אפשרות לספק ל-FFmpeg' מידע על מנגנון לציון מטא-נתונים סטטיים של SMPTE 2086 ב-WebM/MKV, למרות שהוא יפיץ אותו מזרם קלט כאשר הזרם מכיל אותו.

אפשר להשתמש בכלי mkvmerge שהוא חלק מ-mkvtoolsnix כדי להוסיף או לשנות את המטא-נתונים האלה, אם האפליקציה דורשת זאת.

בדוגמה הבאה אפשר להוסיף מטא-נתונים של 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 שניות.