ترجمة FFmpeg إلى WebAssembly (= ffmpeg.js): الجزء 1 - الطبخ



قائمة الأجزاء المترجمة من السلسلة:


  1. الطبخ (أنت هنا)
  2. ترجمة مع المخطوطات
  3. تحويل افي إلى mp4




من هذا الجزء سوف تتعلم:


  1. لماذا كل هذا ضروري؟
  2. كيفية ترجمة FFmpeg في عامل الميناء



لماذا كل هذا ضروري؟


المهام الرئيسية لسلسلة المنشورات هي كما يلي:


  1. قم بإنشاء برنامج تعليمي حول استخدام Emscripten لتجميع مكتبات C / C ++ في JavaScript (أكثر تفصيلًا ومفيدًا مما كتب سابقًا)
  2. مذكرة شخصية

لماذا ffmpeg؟


FFmpeg هو مشروع مجاني مفتوح المصدر ، ويتألف من مجموعة واسعة من المكتبات والبرامج لمعالجة ملفات الفيديو والصوت وملفات الوسائط المتعددة / البث. (من ويكيبيديا)


مكتبة جافا سكريبت التي من شأنها أن توفر مثل هذه القدرات ببساطة غير موجودة. إذا كنت google "ffmpeg.js" ، فستجد عدة حلول مماثلة لما سنفعله:



بالطبع ، يمكن استخدام هذه المكتبات ، لكن بها عيوبها:


  1. يتم إهمال الإصدارات المستخدمة من FFmpeg و Emscripten
  2. المشاريع غير مدعومة لفترة طويلة

في البداية ، كنت أخطط لتقديم الدعم لإحدى المكتبات ، ولكن نظرًا لتراكم العديد من التغييرات على مر السنين ، قررت أن أفعل كل شيء من البداية ، وأنشئ في الوقت نفسه برنامجًا تعليميًا حول استخدام برنامج Emscripten لتجميع مكتبة C / C ++ كبيرة.


كيفية ترجمة FFmpeg في عامل الميناء


أولاً ، نقوم باستنساخ مصادر FFmpeg ، وبما أنه يتم استخدام الفرع الرئيسي للتطوير ، فسنختار الفرع بإصدار محدد.


في وقت كتابة البرنامج التعليمي ، كان أحدث إصدار من FFmpeg هو 4.1.4 ، لذلك سوف نستخدمه.


$ git clone --depth 1 --branch n4.1.4 https://github.com/FFmpeg/FFmpeg 

- يعتبر الرقم 1 اختياريًا ، ولكن هذا سيزيد من سرعة الاستنساخ نظرًا لأننا لسنا بحاجة إلى تنزيل جميع الإلتزامات.


بعد الاستنساخ الناجح ، قم بتجميع المصادر باستخدام gcc للتأكد من أن كل شيء يعمل.


بالطبع ، يمكنك تخطي هذه الخطوة ، لكن تجربتي تقول إنه من الجيد دائمًا لمس نظام الإنشاء أولاً. (تستخدم FFmpeg ماركة قياسية ، وهي أسهل في النقل من Bazel)


يمكن العثور على إرشادات ترجمة FFmpeg وتثبيته في ملف INSTALL.md الموجود في الدليل الجذر:


# تثبيت FFmpeg:


1. اكتب `. / تكوين` لإنشاء التكوين. يمكن الحصول على قائمة خيارات التكوين من خلال تنفيذ `config - help`.


يمكن تكوين `config` من دليل آخر غير مصدر FFmpeg. للقيام بذلك ، مرر المسار المطلق للتهيئة ، على سبيل المثال `/ ffmpegdir / ffmpeg / configra`.


2. الآن اكتب `make` لبناء FFmpeg. ستحتاج إلى GNU Make 3.81 أو أعلى.


3. اكتب `make install` لتثبيت الثنائيات والمكتبات.


إشعار
- - -


- يتم تعطيل التبعيات بخلاف النظام (مثل libx264 ، libvpx) افتراضيًا.


بما أننا لن نقوم بتثبيت FFmpeg ، فلن يلزمك سوى الخطوتين الأولين.


عند التجميع باستخدام gcc ، سنستخدم Docker لإنشاء بيئة من شأنها عزل العملية بأكملها وتحقيق توحيدها على أجهزة مختلفة.


لنقم بإنشاء نص برمجي bash- مع docker.sh في الدليل الجذر بالمحتويات التالية:


 #!/bin/bash docker pull gcc:4 docker run -it \ -v $PWD:/usr/src \ gcc:9.1 \ sh -c 'cd /usr/src && ./configure --disable-x86asm && make -j4' 

- يجب أن يضاف -disable-x86asm كما يطلب ffmpeg ذلك


قم بتشغيل البرنامج النصي:


 $ chmod +x build-with-docker.sh $ ./build-with-docker.sh 

بناءً على سرعة اتصالك بالإنترنت والأجهزة الخاصة بك ، سيستغرق التجميع حوالي 10-30 دقيقة.


لاحظ أنك سترى العديد من التحذيرات ، لأن gcc 9.1 أكثر صرامة من الإصدارات السابقة. هذا طبيعي.


إذا تم إكمال كل شيء بنجاح ، يمكنك تجربة تشغيل ffmpeg :


 $ ./ffmpeg 

أو


 $ docker run -it -v $PWD:/usr/src gcc:9.1 /usr/src/ffmpeg 

سترى شيء مثل:


إصدار ffmpeg n4.1.4 حقوق النشر 2000-2010 لمطوري FFmpeg
بنيت مع مجلس التعاون الخليجي 9.1.0 (دول مجلس التعاون الخليجي)
التكوين: - تعطيل x86asm
libavutil 56.22.100 / 56.22.100
libavcodec 58.35.100 / 58.35.100
libavformat 58.20.100 / 58.20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
فرط سريع الصوت والفيديو التشفير
الاستخدام: ffmpeg [خيارات] [[خيارات infile] -أنا infile] ... {[خيارات outfile] outfile} ...


استخدم -h للحصول على المساعدة الكاملة أو ، على نحو أفضل ، تشغيل "man ffmpeg"


في الجزء التالي ، سنبدأ في تجميع FFmpeg باستخدام Emscripten.

Source: https://habr.com/ru/post/ar473098/


All Articles