2012-02-13 6 views
11

मान लें कि मेरे पास 10 छवियां हैं और मैं उन छवियों को एक स्लाइड शो जैसे वीडियो में जोड़ना चाहता हूं।php के साथ छवियों से वीडियो कैसे बनाएं?

उदाहरण के लिए मैं प्रत्येक छवि को 5 सेकंड के लिए दिखाना चाहता हूं और फिर अगले 5 सेकंड के लिए अगली छवि के साथ जारी रखना चाहता हूं।

यदि यह संभव है, तो संगीत और कुछ वर्णनात्मक पाठ भी शामिल करना सही होगा।

क्या इसके लिए कोई नमूना कोड ffmpeg लाइब्रेरी के साथ हो सकता है?

उत्तर

9

मेरा पहला विचार ffmpeg कमांड को इस तरह से खोलना था।

छवियाँ

ffmpeg से एक वीडियो बनाना एक साथ एक वीडियो में कई चित्रों सिलाई करने के लिए इस्तेमाल किया जा सकता। कई विकल्प हैं, लेकिन निम्न उदाहरण के लिए पर्याप्त होना चाहिए। यह उन सभी छवियों को लेता है जिनमें XXXXX.morph.jpg के फ़ाइल नाम हैं, जहां एक्स संख्यात्मक है, और "output.mp4" नामक एक वीडियो बनाता है। Qscale विकल्प चित्र की गुणवत्ता निर्दिष्ट करता है (1 उच्चतम है, और 32 सबसे कम है), और "-r" विकल्प पर प्रति सेकंड फ्रेम की संख्या निर्दिष्ट करता है।

ffmpeg -r 25 -qscale 2 मैं% 05d.morph.jpg output.mp4

(वेबसाइट है कि इस blurb से। लिंक हटा दिया गया है चला गया है लिया गया था।)

जहां 25 प्रति सेकंड 25 छवियों का मतलब है। आप इसे थोड़ी (1 सेकंड) देरी के लिए 1 पर सेट कर सकते हैं या decimals का उपयोग कर सकते हैं, IE: 2 दूसरी देरी के लिए 0.5।

फिर आप इस तरह कुछ के साथ एक वीडियो और ऑडियो स्ट्रीम गठबंधन कर सकते हैं।

ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -b:a 128k final.mp4 

बेशक अपने उपयुक्त कोडेक्स चुनें। यदि आप एक एमपी 4 वीडियो और एएसी (ffmpeg में निर्मित और अब "प्रयोगात्मक") के लिए libx264 का उपयोग ऑडियो के लिए चाहते हैं।

बस याद रखें कि यदि आप इस तरह की विधि का उपयोग करना चुनते हैं तो ffmpeg आउटपुट डिफ़ॉल्ट रूप से, जब आप इसे पढ़ने का प्रयास करते हैं तो stderr पर जाता है। यदि आप चाहें तो इसे स्टडआउट पर रीडायरेक्ट किया जा सकता है।

+0

ठीक है, तो हम प्रति सेकंड फ्रेम चुन सकते हैं, लेकिन है इसका मतलब है कि हम एफपीएस बढ़ाने के द्वारा वीडियो की अवधि निर्धारित कर सकते हैं? उदाहरण के लिए यदि 25 एफपीएस 1 सेकंड है। 'Ffmpeg -r 250' का उपयोग कर प्रत्येक छवि के लिए 10 सेकंड का मतलब है? – motto

+0

नहीं, यह प्रति सेकंड 25 छवियों का उपयोग करेगा। 25 सिर्फ कॉपी/पेस्ट उदाहरण था। 2 सेकंड पॉज़ के लिए इसे 1 या 0.5 तक सेट करने का प्रयास करें। मैंने इस जानकारी को पोस्ट में भी जोड़ा। – Timeout

+0

यूआरएल अब और काम नहीं कर रहा है। –

5

मेरे लिए दिमाग में पहली बात imagemagick थी। मैंने इसे कई छवि मैनिपुलेशन के लिए PHP के साथ उपयोग किया है और मुझे पता है कि यह वीडियो प्रारूपों की एक सभ्य राशि पढ़ने का समर्थन करता है और उस लिंक के अनुसार यह कुछ को भी लिखने का समर्थन करता है।

+2

कल्पना के लिए ffmpeg की आवश्यकता है इसलिए मूल रूप से php के साथ वीडियो मैनिपुलेशन के लिए इसका उपयोग करने में कोई फायदा नहीं है ... – Michal

4

हाँ, ffmpeg आपके लिए सही समाधान है। मैंने हाल ही में कुछ समान बनाया - एनिमेटेड थंबनेल वाले एक वीडियो साइट। मैंने एक एमिनेटेड gif में छवियों को एक साथ रखने के लिए ffmpeg का उपयोग किया। हालांकि, आउटपुट जो कुछ भी आपको चाहिए ... दुर्भाग्यवश, इस विषय में मेरी खोजों में मुझे कोई नमूना कोड नहीं मिला है जो आपके बाद के सभी बिंदुओं को जोड़ देगा, इसलिए मुझे लगता है कि आपको ffmpeg के साथ मैन्युअल रूप से प्रयास करना होगा .. मेरे प्रोजेक्ट में मैंने कुछ हिस्सों में इसे थोड़ा आसान बनाने के लिए PHP वीडियो टूलकिट http://sourceforge.net/projects/phpvideotoolkit/ का उपयोग किया ...

2

आप ffmpeg के साथ मिश्रण प्रभाव का उपयोग कर सकते हैं:

ffmpeg -framerate 20 \ 
-loop 1 -t 0.5 -i 1.jpg \ 
-loop 1 -t 0.5 -i 2.jpg \ 
-loop 1 -t 0.5 -i 3.jpg \ 
-loop 1 -t 0.5 -i 4.jpg \ 
-c:v libx264 \ 
-filter_complex " \ 
[1:v][0:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b1v]; \ 
[2:v][1:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b2v]; \ 
[3:v][2:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b3v]; \ 
[0:v][b1v][1:v][b2v][2:v][b3v][3:v]concat=n=7:v=1:a=0,format=yuv420p[v]" -map "[v]" out.mp4 

आप ffmpeg के अधिक प्रभाव के लिए bellow लिंक की जांच होनी चाहिए: डी

https://github.com/letungit90/ffmpeg_memo

+0

प्रतिक्रिया के लिए tks @LordNeckbeard मैंने अपना जवाब अपडेट किया – Makio