غالبًا ما يتطلب التعامل مع الوسائط تغيير خصائص ملفات الوسائط، مثل معدل نقل البيانات أو درجة الدقة. قد يكون العثور على طريقة مباشرة للبدء أمرًا مخيفًا جدًا. في هذه الصفحة، ستتعرف على الأدوات المستخدمة وكيفية تثبيتها بسرعة.
في البداية، سنوضّح الاستخدام الأساسي لأداتين شائعتين لإنشاء الوسائط باستخدام سطر الأوامر، وهما: Shaka Packager وFFmpeg، ثم نساعدك على تثبيت الأدوات بسرعة. ما أهمية تغطية تطبيقين؟ على الرغم من أن كلاهما قوي ومفيد في حد ذاته، فإن كل ما يلزم لإعداد الوسائط للويب. أنشأنا أيضًا صفحتَي تحويل الوسائط وتشفير الوسائط اللذين يعرضان العديد من العمليات الأكثر شيوعًا في هذين التطبيقين.
هذه التطبيقات ليست الخيارات الوحيدة المتاحة لمهام معالجة الملفات، لكنها من أكثر التطبيقات شيوعًا وقوة. وتشمل الخيارات الأخرى تطبيقات واجهة المستخدم الرسومية Miro، وHandBrake، وVLC. هناك أيضًا خدمات ترميز أو تحويل ترميز، مثل Zencoder وAmazon Elastic Encoder وGoogle Transcoder API.
شاكا باجر
Shaka Packager هي حزمة SDK مجانية لتغليف الوسائط. إذا كنت تستخدم مشغل وسائط على موقعك، فإن Shaka Packager هو ما ستستخدمه لإعداد الملفات. وتدعم عملية التحويل بروتوكولات بث الفيديو الأكثر شيوعًا: البث الديناميكي التكيُّفي عبر HTTP (DASH) أو البث المباشر عبر بروتوكول HTTP (HLS). Shaka Packager تتوافق مع ميزات الأمان الرئيسية: التشفير المشترك وإدارة الحقوق الرقمية لـ Widevine ويمكنه أيضًا معالجة أحداث البث المباشر والفيديو عند الطلب.
بالرغم من ما ورد في الحزمة، فإن هذه الأداة مفيدة لأكثر من مطوّرين بلغة 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
ابحث عن الخصائص التي تمت مناقشتها في أساسيات ملفات الوسائط ولاحظ بعض الأشياء. يتناسب الطول والعرض مع الدقة الكاملة بالكامل، ويُعدّ برنامج ترميز الصوت والفيديو من برامج الترميز المفضّلة لأنواع الحاويات، وهو الترميز المتقدّم للصوت و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 و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، يمكنك مواصلة تعلُّم المفاهيم الأساسية، من خلال الرابط التالي أساسيات بث الوسائط.