اصول کاربردی رسانه

درک هرمان
Derek Herman
جو مدلی
Joe Medley

کار با رسانه اغلب مستلزم تغییر ویژگی های فایل های رسانه ای مانند نرخ بیت یا وضوح است. پیدا کردن یک راه ساده برای شروع می تواند بسیار ترسناک باشد. در این صفحه با ابزارهای مورد استفاده و نحوه نصب سریع آنها آشنا خواهید شد.

ابتدا، کاربرد اصلی دو ابزار رسانه خط فرمان رایج را شرح می‌دهیم: 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 را پیشنهاد می کنیم، زیرا با این کار در زمان شما صرفه جویی می شود. علاوه بر آن، دستورالعمل‌هایی را برای راه‌اندازی سریع شما ارائه کرده‌ایم.

  1. با ایجاد یک دایرکتوری جدید در جایی در رایانه خود به نام media-tools شروع کنید. می‌توانید از هر نامی که دوست دارید استفاده کنید، فقط توجه داشته باشید که دستورالعمل‌های زیر فرض می‌کنند که media-tools به عنوان نام دایرکتوری استفاده می‌کنید.

  2. یک docker و فهرست media در داخل media-tools ایجاد کنید. این دایرکتوری media شما را از زمینه ساخت دور نگه می دارد. این مهم است زیرا media جایی است که فایل‌هایی ذخیره می‌شوند که می‌خواهیم عملیات را روی آن انجام دهیم، و برخی از آنها ممکن است بسیار بزرگ باشند. اگر Dockerfile مستقیماً در media-tools قرار دهید، ساختن تصویر را کند می کند، اگر آن را دوباره بسازید - شاید برای تغییر نسخه های نصب شده.

  3. /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"]
    
  4. ساخت تصویر:

    docker build -t media-tools ./docker
    
  5. تصویر را به صورت یک پوسته تعاملی اجرا کنید. در لینوکس:

    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 امتحان کرده‌اید، می‌توانید به یادگیری مفاهیم اولیه ادامه دهید، در مرحله بعدی اصول پخش رسانه .