video - أسرع طريقة لاستخراج إطار معين من الفيديو(PHP / ffmpeg / أي شيء)




mp4 video-processing (2)

بالطبع يمكنك كتابة بعض C / C ++ والارتباط بـ -lav * ، وإنشاء نسخة مبسطة من ffmpeg لمجرد استخراج الإطارات ، وربما حتى القيام بذلك كملحق php (كما أنني لن أشغلها بنفس المستخدم ، ناهيك عن نفس العملية). ولكن من غير المحتمل أن تكون النتيجة أسرع ، لأنك لن تتجنب سوى بعض النفقات العامة والتكميلية ، لكن مشكلتك المحتملة هي في الواقع فك الترميز ، والذي لا يزال هو نفسه.

بدلاً من ذلك ، يجب عليك أولاً النظر في استخدام ffmpeg في وضع البحث السريع (أو وضع الهجينة سريع / دقيق). يقول الويكي عن البحث السريع:

يجب تحديد المعلمة -ss قبل -i :

ffmpeg -ss 00:03:00 -i Underworld.Awakening.avi -frames: v 1 out1.jpg

سينتج هذا المثال إطار صورة واحد (out1.jpg) في مكان ما حول الدقيقة الثالثة من بداية الفيلم. سيتم تحليل الإدخال باستخدام إطارات مفتاحية ، وهي سريعة جدًا. والعيب هو أنه سينتهي أيضًا من البحث في بعض الإطار الرئيسي ، وليس بالضرورة أن يكون موجودًا في الوقت المحدد (00:03:00) ، لذلك لن يكون البحث دقيقًا كما هو متوقع.

البحث السريع أقل دقة ، ولكنه أسرع كثيرًا ، حيث لن تحتاج ffmpeg فعليًا إلى فك تشفير (معظم) الفيلم أثناء البحث ، في حين أن الوضع المختلط السريع / الدقيق هو حل وسط جيد. قراءة صفحة ويكي لجميع الخيارات المتاحة.

التعديل 14/06/10 :

اعتبارًا من FFmpeg 2.1 ، عند تحويل الشفرة باستخدام ffmpeg (أي عدم نسخ النسخ) ، يكون -ss دقيقًا حتى عند استخدامه كخيار إدخال. يمكن استعادة السلوك السابق مع خيار -noaccurate_seek. (مصدر)

لذلك ، مع الإصدار 2.1 أو الأحدث ، لا يجب طلب البحث "المختلط" مرة أخرى للحصول على نتائج دقيقة عندما يتعلق الأمر بإعادة التشفير ( .jpeg إلى .jpeg هو إعادة ترميز). يكفي القيام بالسرعة المعتادة ( -ss ... -i ... ) بدلاً من البحث البطيء ( -i ... -ss ... ).

لدي صفحة ويب ، والتي (من بين أشياء أخرى) تحتاج إلى استخراج إطار معين من الفيديو المحملة من قبل المستخدم. يسعى المستخدم إلى جزء معين من .mp4 في المشغل ، ثم ينقر على زر ، ويتم طرد مكالمة ajax إلى برنامج نصي php يأخذ الـ .mp4 ، والوقت المحدد من الفيديو ، ويستخدم ذلك لاستخراج إطار "صورة مصغرة".

حلّي الحالي هو استخدام أمر php exec :

exec("ffmpeg -i $videoPath -ss $timeOffset -vframes 1 $jpgOutputPath");

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

من الناحية المثالية ، لا أريد تثبيت أي شيء يتطلب "عملية تثبيت" حقيقية ... أي إسقاط ملف قابل للتنفيذ في المجلد باستخدام تطبيق الويب الخاص بي أمر جيد ، لكنني لا أضطر إلى تشغيل مثبت بالفعل. أيضا ، يجب أن يكون الحل قادراً على العمل على نظام التشغيل Mac ، و Linux ، والنوافذ (على الرغم من أن linux هو الأولوية القصوى).

ما الذي يمكنني القيام به لتسريع هذه العملية؟

شكر.


في CodeIgniter 3 ، يمكنك استخدام method uhm ... method of Input Class.

من المستندات:

echo $this->input->method(TRUE); // Outputs: POST
echo $this->input->method(FALSE); // Outputs: post
echo $this->input->method(); // Outputs: post




php video ffmpeg mp4 video-processing