קידוד בסיסי

מבוא לדחיסת סרטונים

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

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

קידוד פשוט

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

ffmpeg -i tears_of_steel_1080p.webm -c:v libvpx-vp9 -c:a libopus output.webm

הקידוד ב-FFmpeg משתמש בפרמטרים הבאים בשורת הפקודה:

FFmpeg
-i <filename> מציין את שם קובץ הקלט
-c:v libvpx-vp9 הפקודה אומרת ל-FFmpeg ליצור סרטון VP9
-c:a libopus הפקודה אומרת ל-FFmpeg ליצור אודיו בפורמט Opus
output.webm מציין את שם קובץ הפלט

‫FFmpeg מסיק את סוג הקובץ שצריך ליצור משם קובץ הפלט שבו אתם משתמשים. בדוגמה הזו, FFmpeg יפיק קובץ WebM כי ביקשנו output.webm.

רזולוציה

לכל סרטון יש גודל פריימים (שמציין את הרוחב והגובה בפיקסלים). אפשר להשתמש בפרמטר הבא של שורת הפקודה של FFmpeg כדי לשלוט בגודל הפריים של פלט הווידאו בקידוד VP9:

FFmpeg
-vf scale=<width>x<height> הרוחב והגובה של המסגרת

לדוגמה, פקודת FFmpeg הבאה תיצור פלט של סרטון VP9 WebM במידות 640x480.

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -c:v libvpx-vp9 -c:a libopus output.webm

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

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

‫VP9 תומך בכמה מצבים שונים של קצב העברת נתונים:

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

מומלץ להשתמש במצב CQ לסרטונים מבוססי-קובץ (בניגוד לסטרימינג בשידור חי). הפרמטרים הבאים של שורת הפקודה FFmpeg משמשים למצב CQ:

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

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

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -b:v 750k -crf 33 -c:v libvpx-vp9 -c:a libopus output.webm

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

הגדרות איכות ומהירות

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

פורמט VP9 מציע כמה הגדרות לאיזון בין איכות למהירות:

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

  • הגדרות ה-Threading מאפשרות למקודד להשתמש בכמה תהליכי CPU כדי לקודד את הסרטון. ההגדרות האלה עשויות להפחית מעט את האיכות, אבל הן יכולות לשפר באופן משמעותי את מהירות הקידוד והפענוח.

שני סוגי ההגדרות האלה נשלטים על ידי כמה פרמטרים של שורת פקודה:

FFmpeg
-threads מציין את מספר השרשורים שבהם יש להשתמש במהלך הקידוד.
-quality יכול להיות שהערך הוא good, best או realtime
-speed המשמעות של הפרמטר הזה משתנה בהתאם להגדרה של האיכות: good או realtime. הגדרות המהירות 0-4 חלות על תוכן וידאו על פי דרישה ב-good וב-best, כאשר 0 היא האיכות הגבוהה ביותר ו-4 היא הנמוכה ביותר. הערכים התקינים של Realtime הם 5-8. מספרים נמוכים יותר מציינים איכות גבוהה יותר
-tile-columns החלוקה למשבצות מפצלת את הסרטון לאזורים מלבניים, וכך מאפשרת ריבוי שרשורים לקידוד ולפענוח. מספר המשבצות הוא תמיד חזקה של 2. ‫0=1, ‏ 1=2, ‏ 2=4, ‏ 3=8, ‏ 4=16, ‏ 5=32.

הפקודה הבאה של FFmpeg תיצור קובץ בגודל 640x480 עם איכות שמוגדרת ל'טובה' ומהירות שמוגדרת ל-0 (איכות גבוהה):

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

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