أساسيات تطبيق الوسائط

Derek Herman
Derek Herman
Joe Medley
Joe Medley

غالبًا ما يتطلّب العمل مع الوسائط تغيير خصائص ملفات الوسائط، مثل معدل نقل البيانات أو درجة الدقة. قد يكون العثور على طريقة مباشرة للبدء أمرًا مخيفًا جدًا. في هذه الصفحة، ستتعرّف على الأدوات المستخدَمة وكيفية تثبيتها بسرعة.

أولاً، سنوضّح الاستخدام الأساسي لأداتَي وسائط شائعتَين تعملان من سطر الأوامر: Shaka Packager وFFmpeg، ثم سنساعدك في تثبيت الأداتَين بسرعة. لماذا يجب تغطية تطبيقَين؟ على الرغم من أن كلاهما قوي ومفيد في حد ذاته، فإن كل ما يلزم لإعداد الوسائط للويب. أنشأنا أيضًا صفحتَي تحويل الوسائط وتشفير الوسائط اللذين يعرضان العديد من العمليات الأكثر شيوعًا في هذين التطبيقين.

هذه التطبيقات ليست الخيارات الوحيدة المتاحة لمهام معالجة الملفات، لكنها من أكثر التطبيقات شيوعًا وقوة. تشمل الخيارات الأخرى تطبيقات واجهة المستخدم الرسومية Miro وHandBrake وVLC. هناك أيضًا خدمات ترميز أو تحويل ترميز، مثل Zencoder وAmazon Elastic Encoder وGoogle Transcoder API.

Shaka Packager

Shaka Packager هي حزمة SDK مجانية لتغليف الوسائط. إذا كنت تستخدم مشغّل وسائط على موقعك الإلكتروني، يمكنك استخدام أداة Shaka Packager لإعداد الملفات. وتدعم عملية التحويل بروتوكولَي بث الفيديو الأكثر شيوعًا، وهما: البث الديناميكي التكيُّفي عبر HTTP (DASH) أو البث المباشر وفق بروتوكول HTTP (HLS). يتيح Shaka Packager ميزات الأمان الرئيسية: التشفير الشائع وإدارة الحقوق الرقمية (DRM) من Widevine. ويمكنه أيضًا بث المحتوى مباشرةً وعرض الفيديوهات عند الطلب.

على الرغم مما هو مذكور في الحزمة، هذه الأداة مخصّصة لأكثر من مطوّري لغة C++. ويمكنك استخدامها كمكتبة لإنشاء برامج وسائط وكأداة سطر أوامر لإعداد ملفات الوسائط لتشغيلها على الويب. إنّ السعة الأخيرة هي المفيدة لنا هنا. في الواقع، بالنسبة إلى صنّاع الوسائط على الويب، يشكّل Shaka Packager الطريقة الوحيدة لتنفيذ بعض المهام بدون إنفاق الأموال على التطبيقات التجارية الباهظة التكلفة.

فيما يلي النمط الأساسي لأمر Shaka Packager:

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

هذا ليس الرمز الذي يظهر عند كتابة packager -help. من الأسهل فهم هذا المثال، ويعكس ذلك الأمثلة الواردة في مستندات أداة حزمة Shaka. يُرجى العِلم أنّ هناك عناصر 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

ابحث عن الخصائص التي تمت مناقشتها في أساسيات ملفات الوسائط وتأمّل في بعض الأمور. يتناسب الطول والعرض مع الدقة الكاملة بالكامل، ويُعدّ برنامج ترميز الصوت والفيديو من برامج الترميز المفضّلة لأنواع الحاويات، وهو الترميز المتقدّم للصوت و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 خارج سياق الإنشاء. وهذا أمر مهم لأنّ 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. شغِّل الصورة كواجهة تفاعلية. في نظام التشغيل 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 و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، يمكنك مواصلة التعرّف على المفاهيم الأساسية، وسنتناول في المقالة التالية أساسيات بث الوسائط.