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

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" الطريقة الوحيدة لتنفيذ بعض المهام بدون إنفاق الأموال على التطبيقات التجارية الباهظة التكلفة.

في ما يلي النمط الأساسي لأمر 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

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