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

ديريك هيرمان
ديريك هيرمان
جو ميدلي
جو ميدلي

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

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

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

شاكا باكر

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

ابحث عن الخصائص التي تمت مناقشتها في أساسيات ملفات الوسائط ولاحظ بعض الأشياء. وبما أنّ الارتفاع والعرض مناسبان للدقة الفائقة بالكامل، ومن بين برامج الترميز الصوتية والفيديو المفضّلة لأنواع حاوياتها، وترميز AAC للصوت وH264 للفيديو. لاحظ أيضًا أنه يتم تحديد مجموعات البيانات بالأرقام. وهي مفيدة للعمليات التي تعالج الصوت والفيديو بشكل منفصل.

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

FFmpeg

FFmpeg هو أيضًا تطبيق مجاني لتسجيل ملفات الوسائط وتحويلها وبثها. إمكاناتها ليست أفضل أو أسوأ من إمكانات شاكا باكر. فهما مختلفان فقط.

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