מידע בסיסי על אפליקציות מדיה

Derek Herman
Derek Herman
Joe Medley
Joe Medley

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

קודם נתאר את השימוש הבסיסי בשתי תוכניות שירות נפוצות למדיה של שורת הפקודה: Shaka Packager ו-FFmpeg, ואז נעזור לכם להתקין במהירות את הכלים. מדוע לעסוק בשתי אפליקציות? אומנם שניהם עוצמתיים ושימושיים כשלעצמם, אבל הם לא עושים את כל מה שצריך כדי להכין מדיה לאינטרנט. יצרנו גם את הדפים המרת מדיה והצפנת מדיה שבהם מוצגים פעולות נפוצות רבות יותר בשתי האפליקציות האלו.

האפליקציות האלה הן לא האפשרויות היחידות למשימות של טיפול בקבצים, אבל הן שתיים מהיעילות והנפוצות ביותר. אפשרויות אחרות כוללות את אפליקציות ה-GUI Miro, HandBrake ו-VLC. יש גם שירותי קידוד/המרת קידוד כמו Zencoder, Amazon Elastic Encoder, ו-Google Transcoder API.

שאקה פאנקר

Shaka Packager הוא SDK של אריזת מדיה בחינם. אם השתמשתם בנגן מדיה באתר, Sshaka Packager הוא הכלי שבו הייתם משתמשים כדי להכין את הקבצים. הוא תומך בהמרה של שני הפרוטוקולים הנפוצים ביותר של וידאו בסטרימינג: דינמי סטרימינג דינמי ב-HTTP (DASH) או ב-HTTP Live Streaming (HLS). Shaka Packager תומך בתכונות אבטחה עיקריות: הצפנה נפוצה וניהול זכויות דיגיטליות (DRM) של Widevine. הוא יכול גם להתמודד עם סטרימינג בשידור חי ועם וידאו על פי דרישה (VOD).

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

זוהי התבנית הבסיסית לפקודת Shaka Packager:

packager stream_descriptor [stream_descriptor-2 [stream_descriptor-n]] [flags]

זה לא בדיוק מה שתקבלו אם מקלידים packager -help. קל יותר להסביר את הדוגמה הזו, והיא משקפת את הדוגמאות במסמכי התיעוד של Shaaka Packager. שימו לב שיש מספר פריטי stream_descriptor בדוגמת העיצוב. למרות שאנחנו לא מציגים אותו, אפשר לשנות את שידורי הווידאו והאודיו של הקובץ בנפרד באמצעות פקודה אחת.

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

packager stream_descriptor [stream_descriptor-n] [flags]

packager input=glocken.mp4                       --dump_stream_info

פלט הפקודה הזו הוא:

File "glocken.mp4":
Found 2 stream(s).
Stream [0] type: Video
 codec_string: avc1.640028
 time_scale: 30000
 duration: 300300 (10.0 seconds)
 is_encrypted: false
 codec: H264
 width: 1920
 height: 1080
 pixel_aspect_ratio: 1:1
 trick_play_factor: 0
 nalu_length_size: 4

Stream [1] type: Audio
 codec_string: mp4a.40.2
 time_scale: 48000
 duration: 481280 (10.0 seconds)
 is_encrypted: false
 codec: AAC
 sample_bits: 16
 num_channels: 2
 sampling_frequency: 48000
 language: eng
 seek_preroll_ns: 20833

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

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

FFmpeg

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

הדפוס הבסיסי של פקודת FFmpeg נראה כך:

ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output

כמו Shaka Packager, האפליקציה הזו יכולה לטפל במספר שידורים חיים. בחלק מהאפשרויות אפשר להשתמש במספר מיקומים ולשנות את פלט הקובץ באופן שונה בהתאם למיקום שבו הן נמצאות בפקודה. חשוב לשים לב לכך כשאתם מעיינים בשאלות ל-FFmpeg ב-Stack Overflow ובאתרים דומים.

נשווה שוב את הדפוס הבסיסי לדוגמה של הצגת מאפייני הקובץ.

    ffmpeg [GeneralOptions] [InputFileOptions] -i input        [OutputFileOptions] output

    ffmpeg                                     -i glocken.mp4

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

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'glocken.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.17.100
  Duration: 00:01:47.53, start: 0.000000, bitrate: 10715 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 1920x1080, 10579 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
At least one output file must be specified

התקנת אפליקציות באמצעות Docker

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

  1. מתחילים ביצירת ספרייה חדשה במקום כלשהו במחשב בשם media-tools. אפשר להשתמש בכל שם שרוצים. שימו לב שההוראות הבאות מבוססות על ההנחה שאתם משתמשים ב-media-tools בתור שם הספרייה.

  2. יוצרים ספרייה מסוג docker ו-media בתוך media-tools. הפעולה הזו תחריג את ספריית media מההקשר של ה-build. זה חשוב כי media הוא המקום שבו מאוחסנים קבצים שאנחנו מתכננים לבצע עליהם פעולות, וחלקם יכולים להיות גדולים למדי. העברת Dockerfile ישירות ל-media-tools תאט את בניית התמונה אם תבנה מחדש את התמונה אי פעם – אולי כדי להחליף את הגרסאות המותקנות.

  3. יוצרים /media-tools/docker/Dockerfile ומוסיפים את הוראות ה-build הבאות:

    FROM google/shaka-packager:release-v2.4.3 as packager
    FROM jrottenberg/ffmpeg:4.3.2-alpine38
    COPY --from=packager /usr/bin /usr/bin
    ENTRYPOINT  ["sh"]
    
  4. יוצרים את קובץ האימג':

    docker build -t media-tools ./docker
    
  5. מריצים את התמונה כמעטפת אינטראקטיבית. ב-Linux:

    docker run -w /media -v ${PWD}/media:/media -it --rm media-tools
    /media #
    

    ב-Windows:

    docker run -w /media -v %cd%/media:/media -it --rm media-tools
    /media #
    

כשמריצים את קובץ האימג' אפשר לבדוק את הגרסאות של FFmpeg ו-Shka Packager כדי לוודא שהכול הושלם בהצלחה באמצעות הרצה של ffmpeg -version ו-packager --version. הפלט אמור להיראות כך:

/media # ffmpeg -version
ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 6.4.0 (Alpine 6.4.0)
configuration: --disable-debug --disable-doc --disable-ffplay --enable-shared --enable-avresample --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-gpl --enable-libass --enable-fontconfig --enable-libfreetype --enable-libvidstab --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libxcb --enable-libx265 --enable-libxvid --enable-libx264 --enable-nonfree --enable-openssl --enable-libfdk_aac --enable-postproc --enable-small --enable-version3 --enable-libbluray --enable-libzmq --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-libopenjpeg --enable-libkvazaar --enable-libaom --extra-libs=-lpthread --enable-libsrt --enable-libaribb24 --extra-cflags=-I/opt/ffmpeg/include --extra-ldflags=-L/opt/ffmpeg/lib
libavutil      56. 51.100 / 56. 51.100
libavcodec     58. 91.100 / 58. 91.100
libavformat    58. 45.100 / 58. 45.100
libavdevice    58. 10.100 / 58. 10.100
libavfilter     7. 85.100 /  7. 85.100
libavresample   4.  0.  0 /  4.  0.  0
libswscale      5.  7.100 /  5.  7.100
libswresample   3.  7.100 /  3.  7.100
libpostproc    55.  7.100 / 55.  7.100
/media # packager --version
packager version v2.4.3-dd9870075f-release

עכשיו, אחרי שכבר ניסיתם להשתמש ב-Shaka Packager וב-FFmpeg, תוכלו להמשיך ללמוד את המושגים הבסיסיים ולהמשיך לקרוא את המאמר מידע בסיסי על סטרימינג של מדיה.