מצבי קצב העברת נתונים של VP9 בפירוט

מבוא

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

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

דחיסה

טכנולוגיות דחיסת סרטונים כמו VP9 נועדו לצמצם את כמות הנתונים שנדרשת כדי להעביר למשתמשי הקצה תמונה מובנת ותחושה של תנועה.

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

הסבר מפורט על קוונטיזציה (או Q) מופיע במאמר בוויקיפדיה.

ב-VP9, הכימות מתבצע על מקדמי הטרנספורמציה. הוספה להצפנה מפחיתה את קצב העברת הנתונים הנדרש כדי לשמור על איכות נתפסת.

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

אופטימיזציה של תרחישי שימוש

כדי לאפשר למשתמשים 'לכוון' את הדחיסה של VP9 בהתאם לצרכים הספציפיים שלהם, אפשר לשנות את האיזון בין האיכות לבין קצב העברת הנתונים בזמן הדחיסה הראשונית באמצעות מספר ממשקי תכנות.

למקודד יש איזון משתנה בין מהירות, איכות וקצב העברת נתונים.

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

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

  • אם משתמש מתמקד אך ורק במהירות ההעברה (לדוגמה, בשידור חי באינטרנט או בוועידת וידאו דו-כיוונית), יכול להיות שהקוונטיזציה תהיה משנית לחלוטין למגבלות על הקצב שבו אפשר להעביר בייטים של נתונים שניתנים לשימוש ברשת (כלומר, קצב העברת נתונים (bitrate)).

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

מצבים של קצב העברת נתונים ב-VP9

נתחיל בסקירה של מצבי קצב הביט העיקריים שנתמכים ב-VP9:

מצב
Constant Quantizer (Q) מאפשרת לציין ערך קבוע של קוונטיזציה; קצב העברת הנתונים ישתנה
איכות מוגבלת (CQ) מאפשר להגדיר רמת איכות מקסימלית. האיכות עשויה להשתנות בפרמטרים של קצב העברת הנתונים
קצב סיביות משתנה (VBR) איזון בין איכות לקצב העברת נתונים לאורך זמן במסגרת מגבלות על קצב העברת הנתונים
קצב העברת נתונים קבוע (CBR) ניסיון לשמור על קצב העברת נתונים קבוע יחסית, בזמן שהאיכות משתנה

Q

תרשים של מצב Q

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

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

אופטימיזציה של קצב העברת הנתונים במצב VP9 Q

מצב הכמת הקבוע דורש הגדרה מינימלית. כפי שהשם מרמז, מצב Q מתמקד בשמירה על הכמות של נתוני הקוונטיזציה ברמת 'איכות' יעד, ומאפשר לקוונטיזטור לקבוע את זרימת הנתונים שהוא רוצה לעבד. כל מה שהמשתמש צריך להגדיר הוא את איכות היעד.

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

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

ffmpeg
-b:v 0 כשמסמנים את קצב הדגימה של הווידאו כ-0, מגדירים במפורש את מצב Q
-g <arg> ההגדרה קובעת את המרווח בין תמונות מפתח (Keyframe) בפריימים (ברירת המחדל היא 240).
-crf <arg> הגדרה של רמת האיכות המקסימלית. הערכים החוקיים הם 0–63. מספרים נמוכים יותר מציינים איכות גבוהה יותר
-quality good -speed 0 ברירת המחדל ומומלץ לרוב האפליקציות. ‫best הוא יותר כלי מחקר, עם שיפור שולי לעומת -quality good -speed 0
-lossless מצב ללא אובדן נתונים

קצב העברת נתונים במצב Q : דוגמאות ל-FFmpeg

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

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -g 1 -b:v 0 -crf 0 -quality good \
  -speed 0 -lossless 1 -c:a libvorbis Q_g_1_crf_0_120s_tears_of_steel_1080p.webm.webm

כדי להשוות את ההשפעה של -crf, הדוגמאות הבאות שונות רק ב--crf. שימו לב: -g לא מוגדר, ולכן ברירת המחדל תהיה 240. בפועל, ברירת המחדל של -crf היא 10, ולכן היינו מקבלים את אותה תוצאה גם בלי לכלול את שני הפרמטרים בדוגמה השנייה מתוך שלוש:

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 0 -crf 0 -quality good \
  -speed 0 -c:a libvorbis Q_crf_0_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 0 -crf 10 -quality good \
  -speed 0 -c:a libvorbis Q_crf_10_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 0 -crf 63 -quality good \
  -speed 0 -c:a libvorbis Q_crf_63_120s_tears_of_steel_1080p.webm

הפלט של הדוגמאות האלה שונה בגודל שלו בדיסק. כשערך -crf היה 0, גודל הקובץ היה 711.8MB. כשערך -crf היה 10, גודל הקובץ היה 125.3MB. כשערך -crf היה 63, גודל הקובץ היה 4.5MB. במילים פשוטות, אפשר לראות שהקטנו את האיכות של קובץ VP9 שנוצר על ידי הגדלת הערך של הארגומנט -crf. סיכום מלא של כל קובצי הפלט מופיע בטבלת התוצאות שבהמשך.

עכשיו נשווה את ההשפעה של שינוי ההגדרה -g.

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -g 1 -b:v 0 -quality good \
  -speed 0  -c:a libvorbis Q_g_1_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -g 240 -b:v 0 -quality good \
  -speed 0 -c:a libvorbis Q_g_240_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -g 480 -b:v 0 -quality good \
  -speed 0 -c:a libvorbis Q_g_480_120s_tears_of_steel_1080p.webm

שמנו לב שההגדרה -g 1 יוצרת קובץ גדול מאוד, בגודל 25.9MB. לשם השוואה, אם נשנה את -g 240 (הגדרה מפורשת של אותו ערך שמוגדר כברירת מחדל), נקבל קובץ בגודל 4.5MB‎, ואם נשנה את -g 480 נקבל קובץ בגודל 4.4MB‎.

CQ

CQ הוא מצב מומלץ לסרטונים מבוססי-קובץ.

תרשים של מצב CQ

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

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

בנוסף, צריך להגדיר גם את סף הכמות. ב-VP9, אפשר לשנות את סף הכימות מ-0 עד 63.

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

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

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1000k -maxrate 4000k -crf 10  -c:a libvorbis \
  CQ_4000_1000_crf_10_120s_tears_of_steel_1080p.webm

קובץ הפלט במקרה הזה היה 20.2MB בדיסק – קטן משמעותית מהקידוד במצב Q בדוגמאות שלמעלה.

לעומת זאת, בדוגמה הבאה הגבלנו את קצב העברת הנתונים לטווח מוגדר הרבה יותר.

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1500k -maxrate 2500k -crf 10  -c:a libvorbis \
  CQ_2500_1500_crf_10_120s_tears_of_steel_1080p.webm

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

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 1000k \
  -minrate 750k -maxrate 1400k -crf 10  -c:a libvorbis \
  CQ_1400_750_crf_10_120s_tears_of_steel_1080p.webm

בדוגמה האחרונה הזו, גודל הפלט קטן משמעותית, והוא ירד ל-‎13.2MB בדיסק.

VBR

מומלץ להשתמש במצב של קצב העברת נתונים משתנה (VBR) לסטרימינג של קובצי וידאו על פי דרישה (VOD) עם תוכן שכולל הרבה תנועה (לדוגמה, ספורט). הוא מתאים במיוחד למסירה מבוססת-HTTP.

תרשים של מצב VBR

במודל VBR, יכול להיות שסצנות פעולה יקודדו עם קצב העברת נתונים גבוה יותר מאשר סצנות 'קלות', שמתאימות למסגרת המרכזית.

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

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

הפרמטרים הבאים של שורת הפקודה FFmpeg משמשים למצב VBR:
ffmpeg
-quality good איכות good מתאימה לסרטונים על פי דרישה
-speed <arg> במקרה של סרטונים על פי דרישה, הערכים האפשריים הם 0 עד 5, כאשר 0 מייצג את האיכות הגבוהה ביותר ו-5 את האיכות הנמוכה ביותר. (בסטרימינג בשידור חי הטווח הוא 5-9 – ראו CBR בהמשך)
מצב קצב העברת נתונים משתנה (VBR): דוגמאות ל-FFmpeg
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1500k -maxrate 2500k -quality good -speed 0  -c:a libvorbis \
  VBR_good_0_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1500k -maxrate 2500k -quality good -speed 5  -c:a libvorbis \
  VBR_good_5_120s_tears_of_steel_1080p.webm

CBR

מומלץ להשתמש במצב קצב העברת נתונים קבוע (CBR) לסטרימינג בשידור חי עם VP9.

תרשים של מצב CBR

ב-CBR, קצב העברת הנתונים העליון מוגדר כ "תקרה קשיחה". המשמעות היא שתהליך הקידוד לא יכול להפיק נתונים בקצב שהרשת לא יכולה לשאת.

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

הפרמטרים הבאים של שורת הפקודה FFmpeg משמשים למצב CBR:
ffmpeg
-quality realtime איכות realtime מתאימה לסטרימינג בשידור חי
-speed <arg> בשידורים חיים, הערכים התקינים הם 5 עד 9, כאשר 5 הוא האיכות הגבוהה ביותר ו-9 היא הנמוכה ביותר. (במקרה של וידאו על פי דרישה, הערכים הם 0 עד 5. מידע נוסף זמין בקטע VBR למעלה).
-minrate <arg>
-maxrate <arg>
הגדרת קצב העברת נתונים מינימלי ומקסימלי ** צריך להגדיר את אותה -b:v ערך של קצב העברת נתונים עבור מצב CBR** .

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

מצב קצב העברת נתונים CBR: דוגמאות ל-FFmpeg

בדוגמאות הבאות מוסבר איך להגדיר את קצב העברת הנתונים לערכי היעד 2Mbps ו-500kbps:

ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 2000k -maxrate 2000k -quality realtime -speed 5 -c:a libvorbis \
  CBR_2000_realtime_speed_5_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 2000k -maxrate 2000k -quality realtime -speed 8 -c:a libvorbis \
  CBR_2000_realtime__8_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 500k \
  -minrate 500k -maxrate 500k -quality realtime -speed 5 -c:a libvorbis \
  CBR_500_realtime_speed_5_120s_tears_of_steel_1080p.webm
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 500k \
  -minrate 500k -maxrate 500k -quality realtime -speed 8 -c:a libvorbis \
  CBR_500_realtime_speed_8_120s_tears_of_steel_1080p.webm

תוצאות

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

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

קובץ המקור בכל המקרים היה קליפ באורך דקה ועשרים שניות (1:20) שנלקח מתוך Tears Of Steel.

קובץ דקות קידוד גודל הקובץ בדיסק
Q_g_1_crf_0_120s_tears_of_steel_1080p.webm 81 ‫1.06GB
Q_crf_0_120s_tears_of_steel_1080p.webm 131 ‫711.8MB
Q_crf_10_120s_tears_of_steel_1080p.webm 118 ‫125.3MB
Q_crf_63_120s_tears_of_steel_1080p.webm 27 ‫4.5MB
Q_g_1_120s_tears_of_steel_1080p.webm 51 ‫25.9MB
Q_g_240_120s_tears_of_steel_1080p.webm 28 ‫4.5MB
Q_g_480_120s_tears_of_steel_1080p.webm 10 ‫4.4MB
CQ_4000_1000_crf_10_120s_tears_of_steel_1080p.webm 11 ‫20.2MB
CQ_2500_1500_crf_10_120s_tears_of_steel_1080p.webm 9 ‫24.1MB
CQ_1400_750_crf_10_120s_tears_of_steel_1080p.webm 50 ‫13.2MB
VBR_good_0_120s_tears_of_steel_1080p.webm 3 ‫23.4MB
VBR_good_5_120s_tears_of_steel_1080p.webm 4 ‫23.9MB
CBR_2000_realtime_speed_5_120s_tears_of_steel_1080p.webm 2 ‫24.8MB
CBR_2000_realtime_speed_8_120s_tears_of_steel_1080p.webm 1 ‫21MB
CBR_500_realtime_speed_5_120s_tears_of_steel_1080p.webm 1 ‫8.5MB
CBR_500_realtime_speed_8_120s_tears_of_steel_1080p.webm 1 ‫7.1MB

היה אפשר להבחין בכך שהגדרת ערכים של -speed מעל 5 משנה את מהירות העיבוד של VP9. למרות שמדובר בעלייה משמעותית בקוונטיזציה (כפי שאפשר לראות באפקט ה'דית' החזק בקצב העברת נתונים מהיר באיכות נמוכה מאוד), VP9 עדיין מסוגל להפיק פלט באיכות 1080p בקצב העברת נתונים נמוך מאוד, אם כי הוא מתאים יותר למכשירים ניידים קטנים מאשר למסכים גדולים.

שיקולים לתרחישי שימוש עם שינוי קנה מידה (שינוי גודל)

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

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

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

מצב Q
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 0 -crf 10 -quality good \
  -speed 0 -vf scale=640x480 -c:a libvorbis 640x480_Q_crf_10_120s_tears_of_steel_1080p.webm
מצב CQ
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1500k -maxrate 2500k -crf 10 -vf scale=640x480 -c:a libvorbis \
  640x480_CQ_crf_0_120s_tears_of_steel_1080p.webm
מצב VBR
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 1500k -maxrate 2500k -quality good -speed 5 -vf  scale=640x480 \
  -c:a libvorbis 640x480_VBR_good_5_120s_tears_of_steel_1080p.webm
מצב CBR
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 2000k \
  -minrate 2000k -maxrate 2000k -quality realtime -speed 5 -vf  scale=640x480 \
  -c:a libvorbis 640x480_CBR_2000_realtime_5_120s_tears_of_steel_1080p.webm

טבלת תוצאות של שינוי קנה מידה

קובץ דקות קידוד גודל הקובץ בדיסק
640x480_Q_crf_10_120s_tears_of_steel_1080p.webm 5 ‫3.4MB
640x480_CQ_crf_0_120s_tears_of_steel_1080p.webm 2 ‫22.4MB
640x480_VBR_good_5_120s_tears_of_steel_1080p.webm 1 ‫22.6MB
640x480_CBR_2000_realtime_5_120s_tears_of_steel_1080p.webm 4 ‫23MB

כדי להקל על ההשוואה, אלה אותן פקודות FFmpeg מהדוגמאות הקודמות שלנו, אבל בלי ההתאמה:

קובץ דקות קידוד גודל הקובץ בדיסק
Q_crf_10_120s_tears_of_steel_1080p.webm 56 ‫126MB
CQ_2500_1500_crf_10_120s_tears_of_steel_1080p.webm 9 ‫24.1MB
VBR_good_5_120s_tears_of_steel_1080p.webm 4 ‫23.9MB
CBR_2000_realtime_speed_5_120s_tears_of_steel_1080p.webm 1 ‫24.8MB

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

שינוי קנה מידה והפחתת קצב העברת הנתונים בשילוב

לסיום, בדוגמאות הבאות מריצים מחדש את הדוגמאות של CQ,‏ VBR ו-CBR של שינוי קנה מידה, אבל הפעם מגבילים את קצב העברת הנתונים של היעד לרמה של 500kbps – בערך רבע (בהתאם להקטנת גודל התמונה).

מצב CQ
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 500k \
  -minrate 350k -maxrate 550k -crf 10 -vf scale=640x480 -c:a libvorbis \
  640x480_CQ_crf_0_120s_tears_of_steel_1080p.webm
מצב VBR
ffmpeg -i "120s_tears_of_steel_1080p.webm" -c:v libvpx-vp9 -b:v 500k \
  -minrate 350k -maxrate 500k -quality good -speed 5 -vf scale=640x480 -c:a libvorbis \
  640x480_VBR_good_5_120s_tears_of_steel_1080p.webm
מצב CBR
ffmpeg -i 120s_tears_of_steel_1080p.webm -c:v libvpx-vp9 -b:v 500k \
  -minrate 500k -maxrate 500k -quality realtime -speed 5 -vf scale=640x480 -c:a libvorbis \
  640x480_CBR_2000_realtime_5_120s_tears_of_steel_1080p.webm

טבלת תוצאות של שינוי קנה מידה והורדה של קצב העברת הנתונים (ביטרייט) של היעד

קובץ דקות קידוד גודל הקובץ בדיסק
640x480_CQ_500_crf_0_120s_tears_of_steel_1080p.webm 1 ‫7MB
640x480_VBR_500_good_5_120s_tears_of_steel_1080p.webm 1 ‫7MB
640x480_CBR_500_realtime_5_120s_tears_of_steel_1080p.webm 1 ‫7.6MB

כמו שאפשר לראות, זמן הקידוד התקצר עוד יותר.