सवाल FFmpeg का उपयोग कर छवियों से वीडियो कैसे बनाएं?


क्या इसका उपयोग करना संभव है ffmpeg अनुक्रमों के एक सेट से एक वीडियो बनाएँ, जहां संख्या शून्य से शुरू नहीं होती है?

उदाहरण के लिए, मेरे पास कुछ छवियां हैं [test_100.jpg, test_101.jpg, test_102.jpg, ..., test_200.jpg], और मैं उन्हें एक वीडियो में रूपांतरित करना चाहता हूं। मैंने निम्न आदेश का प्रयास किया, लेकिन यह काम नहीं किया (ऐसा लगता है कि संख्या शून्य से शुरू होनी चाहिए):

ffmpeg -i test_% d.jpg -vcodec mpeg4 test.avi

कोई सलाह?


82
2018-05-13 17:58


मूल


यह कुछ समय हो गया है जब आपने यह पूछा था, लेकिन यदि आप अभी भी प्रश्न में रुचि रखते हैं, तो जवाब हाँ है - मैंने विवरण और नीचे एक उदाहरण पोस्ट किया है: stackoverflow.com/a/12160155/181638 - Assad Ebrahim
@casperOne एक विचार रखने के लिए उपयोगी होगा कि यह विषय क्यों बंद है। यह एक विशिष्ट प्रोग्रामिंग समस्या की तरह लगता है। एफएफएमपीईजी टैग में 3.7 के अनुयायियों हैं, और 27k विचारों के साथ स्पष्ट रूप से लोगों को यह उपयोगी लगता है .. - geotheory
@geotheory टैग आंकड़े अप्रासंगिक हैं। ffmpeg एक है कार्यक्रम कहने के तरीके में, WinRar। जबकि आप के खिलाफ कार्यक्रम कर सकते हैं पुस्तकालयों में ffmpeg, यह सवाल इसके बारे में नहीं है। कमांड लाइन से ffmpeg का उपयोग करना है सुपर उपयोगकर्ता, जहां यह विषय पर है। - casperOne


जवाब:


यदि उपयोग कर रहे हैं तो फाइलों का नाम बदलने की जरूरत नहीं है -start_number इस तरह स्विच करें:

ffmpeg -start_number n -i test_%d.jpg -vcodec mpeg4 test.avi

कहा पे n स्थिरता के अनुक्रम की शुरुआत है।

ध्यान दें, यह तब तक काम करेगा जब तक यह शुरू होने के बाद अनुक्रम अनजान हो। यदि अंतराल हैं और आप सभी स्थिरताओं को शामिल करना चाहते हैं, तो अंतराल को भरने के लिए मरम्मत करना आवश्यक हो सकता है।

कुछ अन्य स्विच हैं जो आपको उपयोगी लग सकते हैं।

मैं धीमी फ्रेम दर प्राप्त करने और छवियों को संपीड़ित करने के लिए निम्न एक लाइनर का उपयोग करता हूं और एक छोटा परिणामस्वरूप वीडियो प्राप्त करता हूं:

ffmpeg.exe -f image2 -framerate 25 -pattern_type sequence -start_number 1234 
        -r 3 -i Imgp%04d.jpg -s 720x480 test.avi

-r 3 विकल्प परिणामस्वरूप वीडियो के फ़्रेमेट को प्रति सेकंड 3 फ्रेम पर सेट करता है ताकि मैं प्रत्येक को थोड़े समय के लिए देख सकूं। -s विकल्प परिणामस्वरूप वीडियो के आकार को प्रबंधित करने के लिए इच्छित संकल्प में चित्रों को पुन: सहेजता है।

(विंडोज शैल में, प्रतिस्थापित करें -i Imgp%04d.jpg साथ में -i "Imgp%%04d.jpg"। इसके लिए माइक फिट्जपैट्रिक के लिए क्रेडिट https://superuser.com/a/344178/153054)


72
2017-08-28 13:19



-r और -framerate के बीच क्या अंतर है?
वे एक ही आईआईआरसी हैं - rogerdpack
बकवास करने की कोई ज़रूरत नहीं है, जब तक आप ऑर्डर स्वीकार करने में प्रसन्न हों (वे कहते हैं) 'ls' ... बस उपयोग करें: ffmpeg -pattern_type glob -i '* .jpg' movie.mp4 - Orwellophile
क्या नियंत्रण करने के लिए कोई स्विच है पहर छवियों के बीच अंतर, कहें, मैं पहली छवि 13s, दूसरी 15s, 24s तीसरे के लिए दिखाना चाहता हूं, समय अंतर उपयोगकर्ता परिभाषित है, क्या यह संभव है? - zionpi
यह भी देखें trac.ffmpeg.org/wiki/... - d3vid


आप नीचे दिए गए कोड स्निपेट का उपयोग कर सकते हैं:

 cat *.jpg | ffmpeg -f image2pipe -r 1 -vcodec mjpeg -i - -vcodec libx264 out.mp4

34
2017-11-08 14:33



यह मेटाडेटा में उल्लिखित रोटेशन में जेपीजी को घुमाता नहीं है। - Erik Johansson


आप में एक उदाहरण स्क्रिप्ट पा सकते हैं ffmpeg दस्तावेज:

3.2 मैं फिल्मों में एकल चित्रों को कैसे एन्कोड कर सकता हूं?

यदि आपके पास नाम बदलने के लिए बड़ी संख्या में चित्र हैं, तो आप बोझ को कम करने के लिए निम्न आदेश का उपयोग कर सकते हैं। बोर्न शेल सिंटैक्स का उपयोग करके कमांड, प्रतीकात्मक रूप से मौजूदा निर्देशिका में सभी फ़ाइलों को लिंक करता है जो * jpg से मेल खाते हैं /tmp' directory in the sequence ofimg001.jpg ',' img002.jpg 'और इसी तरह।

x=1; for i in *jpg; do counter=$(printf %03d $x); ln "$i" /tmp/img"$counter".jpg; x=$(($x+1)); done

फिर भागो:

ffmpeg -f image2 -i /tmp/img%03d.jpg /tmp/a.mpg

17
2017-07-18 17:02



आप x = 0 को शुरू करने के लिए बेहतर बनाना चाहते हैं ताकि छवि का नाम img000.jpg शुरू हो क्योंकि यह ffmpeg की अपेक्षा करता है। इसके अलावा symlinking मेरे लिए काम नहीं किया क्योंकि ffmpeg फ़ाइलों को नहीं मिला, इसलिए मुझे इसके बजाय सीपी का उपयोग करना पड़ा (स्पष्ट गति और अंतरिक्ष ड्रॉ बैक लेकिन मैं उन्हें बाद में आरएम)। यदि आप मूल खोने पर ध्यान नहीं देते हैं तो एमवी भी काम करेगा।
ध्यान दें कि इस उत्तर में, प्रदान किया गया आदेश हार्डलिंक बनाता है, सिम्लिंक नहीं। के उपयोग के संबंध में cp अगर लिंकिंग काम नहीं करती है, तो अगर आपका फाइल सिस्टम इसका समर्थन करता है cp --reflink=auto बहुत बेहतर गति / अंतरिक्ष उपयोग प्राप्त करेंगे। - Félix Saparelli


जहां तक ​​मुझे पता है, आप यादृच्छिक संख्याओं में अनुक्रम शुरू नहीं कर सकते हैं (मुझे याद नहीं है कि आपको इसे 0 या 1 पर शुरू करना चाहिए), इसके अलावा, इसमें अंतराल नहीं हो सकता है, अगर ऐसा होता है, तो ffmpeg अनुक्रम को खत्म कर देगा और अधिक छवियों को जोड़ने बंद करो।

साथ ही, जैसा कि मेरे उत्तर में टिप्पणियों में बताया गया है, याद रखें कि आपको अपनी अनुक्रमणिका की चौड़ाई निर्दिष्ट करने की आवश्यकता है। पसंद:

छवि% 03d.jpg

और यदि आप% 03d अनुक्रमणिका प्रकार का उपयोग करते हैं, तो आपको 0 के साथ अपने फ़ाइल नाम पैड करना होगा, जैसे:

image001.jpg image002.jpg image003.jpg

आदि।


11
2018-05-13 18:15



यदि छवि फ़ाइल नामों में अग्रणी शून्य हैं तो प्रारूप स्ट्रिंग को "% 03d" जैसी चौड़ाई निर्दिष्ट करनी होगी।
यदि यह एकमात्र बाधा है, तो आप अपनी छवियों को ठीक से पुनर्निर्मित सेट पर नाम बदलने या सिमलिंक करने के लिए केवल एक स्क्रिप्ट लिख सकते हैं। - Cascabel
हां, मैंने इससे पहले काम किया है, मैंने थोड़ी देर पहले रूबी में एक रैपर लिखा था जहां आपने example.addImage (), example.processVideo () कहा था और यह एक अस्थायी निर्देशिका बनाएगा, उचित सूचकांक वाली छवियों की प्रतिलिपि / नाम बदलें और वीडियो बनाओ। यह काफी आसान है।
@ जेफ्रोमी मैंने एक सिम्लिंक बनाया है लेकिन मैं ffmpeg को symlink फ़ाइल का पथ कैसे दे सकता हूं? यह मानता है कि symlink फ़ाइल वह छवि है जिसे मैं परिवर्तित करने की कोशिश कर रहा हूं? मैं win7 btw पर हूँ
अनुक्रम 0 से 4 समावेशी से कहीं भी शुरू हो सकता है। - Assad Ebrahim


से ffmpeg के दस्तावेज़:

एक ग्लोब पैटर्न का उपयोग करना

ffmpeg भी बैश-स्टाइल ग्लोबिंग का समर्थन करता है (* किसी भी वर्ण की किसी भी संख्या का प्रतिनिधित्व करता है)।

यह उपयोगी है अगर आपकी छवि अनुक्रमिक हैं लेकिन पिछले उदाहरणों में संख्यात्मक अनुक्रमिक क्रम में जरूरी नहीं है।

ffmpeg -r 1 -pattern_type glob -i 'test_*.jpg' -c:v libx264 out.mp4

इसलिए, जब तक आपकी फ़ाइलों को क्रमबद्ध किया जाता है, तब तक -pattern_type glob स्विच आपके लिए काम करना चाहिए।


10
2017-07-13 07:11



ध्यान दें कि यह ग्लोब नियमित शैल ग्लोब से अधिक सीमित है: trac.ffmpeg.org/ticket/3620 जाहिर है क्योंकि विस्तार से छवि प्रकार काटा जाता है। - Ciro Santilli 新疆改造中心 六四事件 法轮功


मैं फ्रांसिस्को से सहमत हूं, लेकिन एक कामकाज के रूप में आप ffmpeg की अनुक्रम संख्याओं के साथ फ़ाइलों के प्रतीकात्मक लिंक को स्थानांतरित या बनाने के लिए एक त्वरित स्क्रिप्ट लिख सकते हैं। स्क्रिप्ट तब ffmpeg को कॉल कर सकती है और फिर लिंक हटा सकती है या फ़ाइलों को वापस अपने मूल स्थानों पर ले जा सकती है।


5
2018-05-13 18:23





देखो

x=1; for i in *jpg; do counter=$(printf %03d $x); ln "$i"
/tmp/img"$counter".jpg; x=$(($x+1)); done

1
2017-08-14 21:09