כדי להשתמש במדיה לעיתים קרובות, צריך לשנות את המאפיינים של קובצי המדיה, כמו קצב העברת הנתונים או הרזולוציה. מאוד מפחיד למצוא דרך פשוטה להתחיל. בדף הזה נסביר על הכלים שבהם משתמשים ואיך להתקין אותם במהירות.
קודם נתאר את השימוש הבסיסי בשתי תוכניות שירות נפוצות למדיה של שורת הפקודה: 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, כי זה יחסוך לכם זמן רב. בנוסף, סיפקנו הוראות שיעזרו לכם לבצע את ההגדרה במהירות.
מתחילים ביצירת ספרייה חדשה במקום כלשהו במחשב בשם
media-tools
. אפשר להשתמש בכל שם שרוצים. שימו לב שההוראות הבאות מבוססות על ההנחה שאתם משתמשים ב-media-tools
בתור שם הספרייה.יוצרים ספרייה מסוג
docker
ו-media
בתוךmedia-tools
. הפעולה הזו תחריג את ספרייתmedia
מההקשר של ה-build. זה חשוב כיmedia
הוא המקום שבו מאוחסנים קבצים שאנחנו מתכננים לבצע עליהם פעולות, וחלקם יכולים להיות גדולים למדי. העברתDockerfile
ישירות ל-media-tools
תאט את בניית התמונה אם תבנה מחדש את התמונה אי פעם – אולי כדי להחליף את הגרסאות המותקנות.יוצרים
/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"]
יוצרים את קובץ האימג':
docker build -t media-tools ./docker
מריצים את התמונה כמעטפת אינטראקטיבית. ב-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, תוכלו להמשיך ללמוד את המושגים הבסיסיים ולהמשיך לקרוא את המאמר מידע בסיסי על סטרימינג של מדיה.