2013-08-30 6 views
45

मेरे पास एक वेब पेज है, जो (अन्य चीजों के साथ) उपयोगकर्ता द्वारा अपलोड किए गए वीडियो से एक विशिष्ट फ्रेम निकालने की आवश्यकता है। उपयोगकर्ता प्लेयर में .mp4 के किसी विशेष भाग की तलाश करता है, फिर एक बटन क्लिक करता है, और एक AJAX कॉल को php स्क्रिप्ट पर निकाल दिया जाता है जो .mp4 लेता है, और वीडियो से सटीक समय लेता है, और निकालने के लिए इसका उपयोग करता है एक "थंबनेल" फ्रेम।किसी वीडियो से एक विशिष्ट फ्रेम निकालने का सबसे तेज़ तरीका (PHP/ffmpeg/anything)

मेरे वर्तमान समाधान php exec आदेश का उपयोग किया जाता है:

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

... जो सिर्फ अच्छा काम करता है, को छोड़कर यह गुड़ के रूप में के रूप में धीमी है। मेरा अनुमान है कि ffmpeg नौकरी के लिए थोड़ा अधिक है, और मैं अंतर्निहित पुस्तकालयों या कुछ का उपयोग करके बेहतर कर सकता हूं ... हालांकि मुझे शून्य विचार है कि यह कैसे करें।

आदर्श रूप से मैं कुछ भी स्थापित नहीं करना चाहता हूं जिसके लिए वास्तविक "स्थापना प्रक्रिया" की आवश्यकता हो ... यानी, मेरे वेब ऐप के साथ फ़ोल्डर में निष्पादन योग्य छोड़ना ठीक है, लेकिन मुझे वास्तव में नहीं होना चाहिए एक इंस्टॉलर चलाओ। इसके अलावा, समाधान मैक, लिनक्स और विंडोज़ पर चलने में सक्षम होना चाहिए (हालांकि लिनक्स शीर्ष प्राथमिकता है)।

इस प्रक्रिया को गति देने के लिए मैं क्या कर सकता हूं?

धन्यवाद।

+0

आप थंबनेल पीढ़ी की नौकरी को कतार में डाल सकते हैं और उपयोगकर्ता को अन्य सामानों के साथ मिलते हैं, जबकि यह किसी अन्य स्क्रिप्ट द्वारा उत्पन्न होता है जिसे उन्हें प्रतीक्षा करने की आवश्यकता नहीं होती है। – GordonM

+0

अच्छी तरह से ffmpeg c के साथ खेलने का प्रयास करें: \ ffmpeg.exe -ic: \ video \ hello.mov - ss 10 - t 4 -f image2 - sameq -vcodec mjpeg img-% 03d.jpg यह बहुत मुश्किल हो सकता है और यह संभव है कि यदि आप कुछ अलग-अलग एट्रिब्यूट्स का उपयोग करते हैं तो आप बड़े प्रदर्शन में सुधार प्राप्त कर सकते हैं ... –

+0

@DusanPlavak ['-sameq' का मतलब" समान गुणवत्ता "नहीं है] (http://superuser.com/a/478550/110524) और ffmpeg से हटा दिया गया है। जेपीजी आउटपुट के लिए '(वर्ग स्केल: v' का उपयोग 2 (उच्चतम गुणवत्ता) की प्रभावी श्रेणी 31 (निम्नतम गुणवत्ता) के साथ करें। – LordNeckbeard

उत्तर

67

बेशक आप कुछ सी/सी ++ को कोड कर सकते हैं और -lav * से लिंक कर सकते हैं, मूल रूप से फ़्रेम निकालने के लिए ffmpeg का सरलीकृत संस्करण बना सकते हैं, और शायद इसे एक PHP एक्सटेंशन के रूप में भी कर सकते हैं (मैं इसे भी नहीं चलाऊंगा एक ही उपयोगकर्ता के रूप में, एक ही प्रक्रिया में अकेले रहने दें)। लेकिन परिणाम तेजी से होने की संभावना बहुत कम है, क्योंकि आप केवल कुछ फोर्किंग और सेटअप ओवरहेड से बचेंगे, लेकिन आपकी संभावित समस्या वास्तव में डिकोडिंग है, जो अभी भी वही होगी।

इसके बजाय, आपको पहले तेजी से मांग मोड (या तेज़/सटीक हाइब्रिड मोड) में ffmpeg का उपयोग करना चाहिए। Their wiki states तेज मांग के बारे में:

-ss पैरामीटर निर्दिष्ट करने की आवश्यकता है मैं पहले:

ffmpeg 00:03:00 -ss मैं Underworld.Awakening.avi -frames: वी 1 out1 .jpg

यह उदाहरण मूवी की शुरुआत से तीसरे मिनट के आसपास कहीं एक छवि फ्रेम (out1.jpg) का उत्पादन करेगा। इनपुट कीफ्रेम का उपयोग करके पार्स किया जाएगा, जो बहुत तेज़ है। दोष यह है कि यह कुछ कीफ्रेम पर भी मांग को पूरा करेगा, जो आवश्यक समय पर पर स्थित नहीं है, इसलिए मांग अपेक्षित के रूप में सटीक नहीं होगी।

फास्ट मांग ffmpeg के रूप में वास्तव में डिकोड करने के दौरान की जरूरत नहीं होगी फिल्म (के सबसे), कम सटीक है, लेकिन एक बहुत बहुत तेजी से, की तलाश करते हुए तेजी से/सही हाइब्रिड मोड अच्छा समझौता है। सभी उपलब्ध विकल्पों के लिए the wiki page पढ़ें।

संपादित 14/06/10:

FFmpeg 2.1 के रूप में, जब ffmpeg के साथ ट्रांसकोडिंग (अर्थात नकल स्ट्रीम नहीं), -ss यहाँ तक कि जब एक इनपुट विकल्प के रूप में इस्तेमाल अब सटीक है। पिछला व्यवहार -noaccurate_seek विकल्प के साथ पुनर्स्थापित किया जा सकता है। (source)

तो 2.1+ के साथ, "संकर" की मांग अब और सटीक परिणाम के लिए आवश्यक नहीं किया जाना चाहिए जब यह फिर से-एन्कोड करने के लिए आता है (और .jpeg को बचत एक फिर से एनकोड है)। धीमी मांग (-i ... -ss ...) की बजाय सामान्य तेज़ मांग (-ss ... -i ...) करने के लिए पर्याप्त है।

+1

निष्पादन समय में अंतर लगभग 20 मिनट (3 जीबी वीडियो) था। दिन बचाया – weisjohn

+3

फास्ट मांग दूरस्थ वीडियो के लिए भी काम करने लगती है, उदा। http या https पर। –

+0

धन्यवाद, "14/06/10 संपादित करें" संस्करण मेरे लिए काम करता है! – matt

संबंधित मुद्दे

 संबंधित मुद्दे