מטרה

הקטע הזה מספק המלצות להגדרות קידוד של VP9 כשמבצעים קידוד מבוסס קובץ (כלומר, לא בשידור חי).

ההמלצות האלה מיועדות ליעדים הבאים:

  • איזון בין איכות לבין מהירות הקידוד
  • קצב העברת הנתונים המינימלי להשגת איכות סבירה
  • הגדרות שיתאימו למגוון רחב של סוגי תוכן

ההמלצות האלה לא:

  • קידוד כתובת פעיל
  • אופטימיזציה לסוגי תוכן ספציפיים (למשל קטעי וידאו של ספורט עם תנועה גבוהה)
  • קביעת הגדרות לדרישות ספציפיות של מכשיר או רשת

קידוד ברזולוציה אחת

VP9 תומך במגוון גודלי מסגרות, מרזולוציות קטנטנות ועד 4K. מסגרות גדולות יותר מספקות איכות גבוהה יותר, אבל נדרש להן רוחב פס גדול יותר כדי לספק אותן ונפח עיבוד גדול יותר לצורך הפענוח.

אם אתם יוצרים רזולוציה אחת, 640x480 היא אפשרות בטוחה למגוון רחב של אתרים ומכשירים ניידים. הפרמטרים הבאים של שורת הפקודה FFmpeg מאפשרים ליצור קובץ ברזולוציה אחת ב-750kbps.

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

קידוד ברזולוציה גבוהה

אם אתם מתכננים לטרגט מספר רזולוציות, או אם לרשת המסירה יש רוחב פס משתנה, מומלץ ליצור כמה רזולוציות. לאחר מכן הנגן יוכל לקבוע איזו רזולוציה תישלח אל הצופה.

קידודים ברזולוציה גבוהה של סרטון משמשים לעתים קרובות בסטרימינג מותאם של קצב העברת נתונים, שבו נגן הווידאו עובר בין רזולוציות בזמן אמת בהתאם לרוחב הפס של המשתמש. לדוגמה, Shake Player מאפשר להפעיל מקודדים ברזולוציה גבוהה, כאשר כל קידוד של VP9 נמצא בקובץ נפרד ומניפסט DASH מספק מידע על כל קידוד.

למידע נוסף על אריזת וידאו בפורמטים מותאמים של סטרימינג, אפשר לעיין בחבילה של Shaka ,. המדריך הזה יתמקד בהגדרות הקידוד של VP9 במספר רזולוציות.

ניתן להשתמש בכל ההגדרות הבאות לקבצים בודדים ברזולוציות שונות, ומשולבות בהן סט מקיף שמתאים לסטרימינג מותאם אישית. הערה לגרסה 640x480 יש שתי גרסאות: אחת באיכות נמוכה (LQ) והשנייה באיכות בינונית (MQ).

קצב העברת נתונים

מצב 'איכות מוגבלת' (CQ) מומלץ בעת קידוד קובצי VP9 לצפייה על פי דרישה. מצב הקידוד הזה מאפשר לציין יעד של קצב העברת נתונים ממוצע, ובמקביל לשלוט באיכות הסרטון וכן בקצב העברת הנתונים המינימלי והמקסימלי.

קצבי העברת הנתונים הבאים מוצעים כבסיסי הפצה לאינטרנט ולניידים. ההצעות האלה מצמצמות את קצב העברת הנתונים ולשפר את איכות הווידאו שמתאימה להפצת צרכנים באינטרנט ובנייד. כדאי לחשוב עליהן כהמלצות על &קצב העברת נתונים של 39; נמוך' שעדיין יכולות להשיג איכות סבירה.

בדוגמאות שלמעלה, מומלץ להגדיר קצב העברת נתונים מינימלי של 50% מקצב העברת הנתונים היעד, ומקסימום של 145% מיעד קצב העברת הנתונים.

גודל מסגרת/קצב פריימים קצב העברת נתוני יעד (VOD, kbps) קצב העברת הנתונים המינימלי (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 (LQ) 375 (MQ) 742 (LQ) 1088 (MQ)
1280x720p ב-24,25,30 1024 512 1485
1280x720p ב-50,60 1800 900 2610
1920x1080p ב-24,25,30 1800 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א: קצבי העברת נתונים מומלצים ל-VOD

ב-FFmpeg, קצב העברת הנתונים נשלט על ידי פקודות הבאות:

FFmpeg
-b:v <arg> מגדיר קצב העברת נתונים (למשל, 500k)
-minrate <arg>
-maxrate <arg>
מגדיר את קצב העברת הנתונים המינימלי והמקסימלי.

לדוגמה, בעת קידוד תוכן בגודל 640x480 אפשר להשתמש בשורת הפקודה -b:v 750k -minrate 375 -maxrate 1088.

איכות

במצב CQ מגדירים גם את רמת האיכות המקסימלית. רמות האיכות הבאות מומלצות לקידוד VP9 מבוסס-קבצים:

גובה מסגרת איכות היעד (CQ)
240 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. כך מתקבל איזון טוב בין זמן הקידוד לבין איכות הפלט.

גובה מסגרת מהירות (כניסה ראשונה) מהירות (כרטיס שני)
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 שניות עבור תוכן ב-30fps). תמונות מפתח הן מסגרות וידאו עצמאיות. הן לא מסתמכות על פריימים אחרים כדי לעבד את התמונות, אבל הן בדרך כלל גדולות יותר מסוגי פריימים אחרים. להפעלה באינטרנט ובנייד, מרווח רחב בין תמונות מפתח מאפשר למקודד לבחור את המיקום הטוב ביותר של תמונות מפתח, כדי למקסם את האיכות.

בריווח של תמונות מפתח ב-FFmpeg יש שליטה בפקודה -g, המציינת את מספר המסגרות. ב-240 פריימים זה יהיה -g 240.

המלצות להקלדה ולשרשור

האריח מפצל את המסגרת של הסרטון למספר עמודות, מה שמפחית מעט את האיכות אבל מאיץ את ביצועי הקידוד. האריחים חייבים להיות ברוחב 256 פיקסלים לפחות, כך שיש מגבלה על מספר האריחים שבהם ניתן להשתמש.

בהתאם למספר האריחים ולרזולוציה של מסגרת הפלט, ייתכן שיהיו יותר שרשורים של מעבד המידע. באופן כללי, יש ערך מוגבל לשרשורים מרובים כאשר גודל מסגרת הפלט קטן מאוד.

ההגדרות הבאות מומלצות לאריחים ולשרשור ברזולוציות שונות.

גודל המסגרת מספר עמודות המשבצות מספר השרשורים
320x240 1 (-tile-columns 0) 2
6,40x360 2 (-tile-columns 1) 4
640x480 2 (-tile-columns 1) 4
1,280x720 4 (-tile-columns 2) 8
1920x1080 4 (-tile-columns 2) 8
2,560x1,440 8 (-tile-columns 3) 16
3,840x2,160 8 (-tile-columns 3) 16

ב-FFmpeg, מספר המשבצות נשלט באמצעות הפרמטר -tile-columns ומספר השרשורים לפי -threads. לדוגמה, קידוד 640x480 משתמש בשורת הפקודה -tile-columns 2 -threads 4.

שורת הפקודה של 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 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

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

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

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

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

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

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

1920x1080 (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

2,560x1,440 (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

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

3840x2160 (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