विभिन्न अवधि के साथ FFMPEG छवि अनुक्रम


16

मान लीजिए कि मेरे पास 1 मिनट की लंबाई की एक एमपी 3 फ़ाइल है। और मेरे पास 20 png चित्र हैं। मैं इन छवियों और एक ऑडियो को वीडियो फ़ाइल में संयोजित करना चाहता हूं, लेकिन मैं स्क्रीन पर प्रत्येक छवि को 3 सेकंड तक नहीं करना चाहता हूं, मैं चाहता हूं कि कुछ छवियां पिछले 5 सेकंड तक रहें, अन्य 1 सेकंड आदि।

जिस तरह से मैं सोच सकता हूं वह सिर्फ उन छवियों को कॉपी करना है जो अधिक समय तक चलना चाहिए, जैसे कि छवि 1, छवि 2, छवि 3 के बिल्कुल समान होने के लिए, यह मुझे वीडियो में 3x अधिक समय देता है।

हालांकि यह बहुत समय और जगह की खपत है। क्या ffmpeg में कोई स्विच / पैरामीटर है जो मुझे ऐसा करने की अनुमति देता है?


जैसा कि आपको पता चला कि ffmpeg को समान लंबाई के लिए प्रत्येक छवि प्रदर्शित करनी चाहिए। यदि आप उस लंबाई को अलग-अलग करना चाहते हैं, तो आपको पहले से छवियों को डुप्लिकेट करना होगा या प्रत्येक वांछित अवधि के अलग-अलग वीडियो बनाने होंगे और फिर उन्हें संक्षिप्त करना होगा। हो सकता है कि कुछ अन्य उपयोगकर्ताओं के पास बेहतर विचार हों, लेकिन इस तरह का कार्य संपादक के साथ आसान हो सकता है, जैसे कि Kdenlive, आदि
llogan

मैं इसे php स्क्रिप्ट से कर रहा हूं, इसलिए संपादक वह नहीं है जिसकी मुझे तलाश है।
Flot2011

जवाबों:


21

Ffmpeg 2.0 का उपयोग करने के लिए कुछ तरीके हैं:

  1. एक विधि फ़ाइल संशोधन समय का उपयोग करने के लिए है। सबसे पहले छवि फ़ाइलों का संशोधन समय सेट करें ताकि प्रत्येक छवि फ़ाइल में संशोधन का समय पहले की तुलना में अधिक हो; समय का अंतर पिछली छवि की अवधि (1 सेकंड रिज़ॉल्यूशन के साथ) है। फिर image2 डीमूक्सर विकल्प का उपयोग करें -ts_from_file 1। उदाहरण के लिए:

    touch -t 01010000.00 image01.png
    touch -t 01010000.03 image02.png
    touch -t 01010000.08 image03.png
    ...
    ffmpeg -ts_from_file 1 -i image%2d.png -i audio.mp3 -c:a copy -vf fps=25 out.avi
    
  2. एक अन्य विधि है , concatडिमूक्सर का उपयोग करना , जो वैकल्पिक अवधि के साथ समतल करने के लिए फाइलों की एक सूची लेता है। पहले अपनी छवियों और अवधि को सूचीबद्ध करने वाली एक फ़ाइल बनाएं जो इस तरह दिखती है:

    ffconcat version 1.0
    file image01.png
    duration 3
    file image02.png
    duration 5
    file image03.png
    

    फिर इस फाइल को ffmpeg के इनपुट के रूप में प्रदान करें। उदाहरण के लिए:

    ffmpeg -i in.ffconcat -i audio.mp3 -c:a copy -vf fps=25 out.avi
    

अंतिम अवधि के बाद आपको अंतिम फ़ाइल की नकल करने की आवश्यकता हो सकती है। -c:a copyएमपी 3 ऑडियो को इस रूप में कॉपी करता है; यदि आप इसे किसी अन्य ऑडियो कोडेक में बदलना चाहते हैं तो आप इसके स्थान पर निर्दिष्ट कर सकते हैं copy। आप किसी भिन्न वीडियो कोडेक को -c:vकिसी भिन्न पिक्सेल प्रारूप के साथ निर्दिष्ट करना चाह सकते हैं -pix_fmt, जैसे कि -c:v libx264 -pix_fmt yuv420p-vf fps=25आउटपुट फ्रेम दर 25 एफपीएस करेगा। यदि आपका ऑडियो लंबा है और आप चाहते हैं कि यह छवियों के बाद काट दिया जाए, तो -shortestविकल्प का उपयोग करें ।


कोई भी विचार क्यों यह सिर्फ काम करने के लिए प्रतीत नहीं होता है (मेरा मतलब है, मैंने पत्र के बाद दूसरे (और पहले करने की कोशिश की) के लिए विकल्प का चयन किया है, लेकिन यह या तो छवियों के साथ एक काले वीडियो को आउटपुट करता है या छवियां सिर्फ एक फ्रेम के लिए फ्लैश करती हैं, कई नहीं ffconcat फ़ाइल में निर्दिष्ट सेकंड्स।
सुपर

@ चुप: यह अभी भी मेरे लिए काम करता है। यदि वीडियो काला है, तो आपका खिलाड़ी आपके द्वारा उपयोग किए जा रहे वीडियो प्रारूप का समर्थन नहीं कर सकता है; -c:v libx264 -profile:v baseline -pix_fmt yuv420p out.mp4out.avi के बजाय प्रयास करें , या एक अलग खिलाड़ी जैसे कि mpv या ffplay की कोशिश करें। यह भी सुनिश्चित करें कि आप FFmpeg के वर्तमान संस्करण का उपयोग कर रहे हैं, और अंतिम अवधि के बाद अंतिम छवि फ़ाइल नाम की नकल करें।
mark4o

एचएम, अजीब, यू एमपीवी और ffmpeg.org से डाउनलोड किए गए ffmpeg स्टैटिक बिल्ड का उपयोग करते हैं, और यह केवल अवधि को अनदेखा करता है। वैसे भी, मुझे ऐसा करने का एक और तरीका मिला, इसलिए यह उतना
sup

1

यह मानते हुए ffmpeg -i in.ffconcat -vf fps=25 out.avi

(2018: in.ffconcat फ़ाइल सामग्री) - यह काम करता है:

ffconcat संस्करण 1.0
फ़ाइल text.png
अवधि 30.0
फ़ाइल text.png

जबकि यह नहीं है

ffconcat संस्करण 1.0
फ़ाइल text.png
अवधि 30.0

यानी दूसरे मामले में

ffprobe out.avi -show_entries format=duration -v 0

[प्रारूप]
अवधि = 0.040000
[/ प्रारूप]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.