קונטיינרים ורכיבי קודק

דרק הרמן
דרק הרמן
ג'ו מדלי
ג'ו מדלי

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

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

אנחנו משתמשים בהצעה להתקנה של Docker ובקובץ glocken.mov מ-Prepare media files for the Web שנוספו לספרייה media. השתמשנו ב-FFmpeg בגרסה 4.3.2 לכל הפקודות בקטע הזה.

מאגרים

קודם כול, אנחנו צריכים ליצור את שני הקונטיינרים שלנו מהקובץ .mov עם סיומות הקובץ .mp4 ו-.webm, עם גם שידור אודיו וגם וידאו בסטרימינג בתוך הקובץ. אם אתם לא יודעים מה ההבדל ביניהם, קראו את היסודות של קובצי מדיה.

  1. MP4

    /media # ffmpeg -i glocken.mov glocken.mp4
    
  2. WebM

    /media # ffmpeg -i glocken.mov glocken.webm
    

היצירה של WebM נמשכת יותר זמן בהשוואה ל-MP4. זה לא מפתיע כשבוחנים את התוצאות. בעוד ש-MP4 נדחס בערך 83% מגודל הקובץ המקורי, WebM ירד ל-78% מגודל הקובץ המקורי, אבל יכול להיות הרבה יותר קטן. התוצאות עשויות להשתנות. חשוב לציין ש-FFmpeg 4.2.2 הגדיר את ברירת המחדל לקצב העברת הנתונים ל-200k, וב-4.3.2 הוא לא הגדיר קצב העברת נתונים כברירת מחדל. לכן הסרטון הוא כבר לא רק4% מהמקור. תוכלו לראות זאת בעצמכם באמצעות פקודת bash ls -a בתיקייה שבה נמצאים קובצי המדיה.

לדוגמה:

/media # ls -l
-rw-r--r-- 1 root  root  12080306 Mar 7 12:16 glocken.mov
-rwx------ 1 root  root  10106446 Mar 7 12:33 glocken.mp4
-rwx------ 1 root  root   9503301 Mar 7 18:30 glocken.webm

כדי לקבל קובץ קטנטן, צריך לבצע את הפעולות הבאות:

/media # ffmpeg -i glocken.mov -b:v 200k glocken.webm
...
frame=  300 fps=3.6 q=0.0 Lsize=     483kB time=00:00:10.01 bitrate= 395.0kbits/s speed=0.121x
video:359kB audio:117kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.356068%
/media # ls -l
-rw-r--r-- 1 root  root  12080306 Mar 7 12:16 glocken.mov
-rwx------ 1 root  root  10106446 Mar 7 12:33 glocken.mp4
-rwx------ 1 root  root    494497 Mar 7 18:45 glocken.webm

בדיקת העבודה

כדי לאמת את התוצאות, השתמשו ב-FFmpeg וב-Shaka Packager, כפי שכבר מוצג ביסודות של אפליקציית המדיה:

/media # packager input=glocken.mp4 --dump_stream_info
/media # ffmpeg -i glocken.mp4

רכיבי קודק

בהמשך, קודק. כפי שצוין ביסודות של קובצי מדיה, קודק אינו זהה לקונטיינר (סוג קובץ). שני קבצים מאותו סוג קונטיינר יכולים להכיל נתונים דחוסים באמצעות רכיבי קודק שונים. לדוגמה, פורמט WebM מאפשר לקודד אודיו באמצעות Vorbis או Opus. כדי לשנות את הקודק אנחנו משתמשים ב-FFmpeg. לדוגמה, הפקודה הזו מפיקה קובץ .mkv עם קודק אודיו vorbis וקודק וידאו av1.

/media # ffmpeg -i glocken.mov -c:a vorbis -c:v av1 glocken.mkv

בדוגמה הזו, הדגל -c:a וה--c:v משמשים לציון רכיבי הקודק של האודיו והווידאו בהתאמה.

הדף המרת מדיה מפרט את הפקודות הנדרשות להמרת רכיבי קודק. הטבלאות הבאות מסכמת את הספריות שמשמשות ב-FFmpeg לביצוע המרות של Codec לקובצי WebM ו-MP4. אלה הפורמטים המומלצים ל-DASH ול-HLS בהתאמה.

וידאו

קודק תוסף ספרייה
av1 WebM, mkv libaom-av1
h264 MP4 libx264
vp9 WebM libvpx-vp9

אודיו

קודק תוסף ספרייה
AC MP4 AC
אופוס WebM Libopus
Vorbis WebM Libvorbis

בשלב הבא נראה לך איך לשנות את קצב העברת הנתונים של קבצים חדשים שיצרת.