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