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