کار با رسانه اغلب مستلزم تغییر ویژگی های فایل های رسانه ای مانند نرخ بیت یا وضوح است. پیدا کردن یک راه ساده برای شروع می تواند بسیار ترسناک باشد. در این صفحه با ابزارهای مورد استفاده و نحوه نصب سریع آنها آشنا خواهید شد.
ابتدا، کاربرد اصلی دو ابزار رسانه خط فرمان رایج را شرح میدهیم: Shaka Packager و FFmpeg و سپس به شما کمک میکنیم تا ابزارها را سریع نصب کنید. چرا دو برنامه را پوشش دهیم؟ در حالی که هر دو به خودی خود قدرتمند و مفید هستند، اما هیچکدام از آنها برای آمادهسازی رسانه برای وب لازم نیست. ما همچنین صفحات تبدیل رسانه و رمزگذاری رسانه را ایجاد کردیم که عملیات رایج بیشتری را با این دو برنامه نشان می دهد.
این برنامه ها تنها گزینه های موجود برای کارهای دستکاری فایل نیستند، اما دو مورد از رایج ترین و قدرتمندترین آنها هستند. گزینه های دیگر عبارتند از برنامه های رابط کاربری گرافیکی Miro , HandBrake , و VLC . همچنین خدمات رمزگذاری/ترانکدینگ مانند Zencoder ، Amazon Elastic Encoder و Google Transcoder API وجود دارد.
بسته بندی شاکا
Shaka Packager یک SDK بسته بندی رسانه رایگان است. اگر از پخش کننده رسانه در سایت خود استفاده می کردید، Shaka Packager همان چیزی است که برای تهیه فایل ها استفاده می کنید. این از تبدیل برای دو پروتکل رایج پخش ویدئو پشتیبانی می کند: جریان تطبیقی پویا از طریق HTTP ( DASH ) یا HTTP Live Streaming ( HLS ). Shaka Packager از ویژگی های کلیدی امنیتی پشتیبانی می کند: رمزگذاری رایج و مدیریت حقوق دیجیتال Widevine (DRM). همچنین میتواند پخش زنده و ویدیوی درخواستی را مدیریت کند.
علیرغم آنچه روی بسته نوشته شده است، این ابزار بیشتر از توسعه دهندگان C++ است. شما می توانید آن را هم به عنوان یک کتابخانه برای ساختن نرم افزار رسانه ای و هم به عنوان یک ابزار خط فرمان برای تهیه فایل های رسانه ای برای پخش وب استفاده کنید. این ظرفیت دوم است که در اینجا برای ما مفید است. در واقع، برای سازندگان رسانه های وب، Shaka Packager تنها راه برای انجام برخی کارها بدون صرف هزینه برای برنامه های تجاری گران قیمت است.
الگوی اصلی دستور Shaka Packager در اینجا آمده است:
packager stream_descriptor [stream_descriptor-2 [stream_descriptor-n]] [flags]
اگر packager -help
تایپ کنید، این دقیقاً چیزی نیست که به دست میآورید. این مثال سادهتر است و این مثالهای موجود در مستندات Shaka 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
به دنبال ویژگی هایی باشید که در اصول فایل Media بحث شده است و به چند چیز توجه کنید. ارتفاع و عرض برای فول اچ دی درست است و کدک های صوتی و تصویری از کدک های ترجیحی برای انواع کانتینرشان، 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 را پیشنهاد می کنیم، زیرا با این کار در زمان شما صرفه جویی می شود. علاوه بر آن، دستورالعملهایی را برای راهاندازی سریع شما ارائه کردهایم.
با ایجاد یک دایرکتوری جدید در جایی در رایانه خود به نام
media-tools
شروع کنید. میتوانید از هر نامی که دوست دارید استفاده کنید، فقط توجه داشته باشید که دستورالعملهای زیر فرض میکنندmedia-tools
به عنوان نام دایرکتوری استفاده میکنید.یک
docker
و فهرستmedia
در داخلmedia-tools
ایجاد کنید. این دایرکتوریmedia
شما را از زمینه ساخت دور نگه می دارد. این مهم است زیراmedia
جایی است که فایلهایی ذخیره میشوند که میخواهیم عملیات را روی آن انجام دهیم، و برخی از آنها ممکن است بسیار بزرگ باشند. اگرDockerfile
مستقیماً درmedia-tools
قرار دهید، ساختن تصویر را کند می کند، اگر آن را دوباره بسازید - شاید برای تغییر نسخه های نصب شده./media-tools/docker/Dockerfile
را ایجاد کنید و دستورالعملهای ساخت زیر را اضافه کنید: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
تصویر را به صورت یک پوسته تعاملی اجرا کنید. در لینوکس:
docker run -w /media -v ${PWD}/media:/media -it --rm media-tools /media #
در ویندوز:
docker run -w /media -v %cd%/media:/media -it --rm media-tools /media #
در حین اجرای تصویر، میتوانید نسخههای FFmpeg و Shaka 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 امتحان کردهاید، میتوانید به یادگیری مفاهیم اولیه ادامه دهید، در مرحله بعدی اصول پخش رسانه .