Ffmpeg में fadeIn / out प्रभाव के साथ 5 छवियों वाला वीडियो बनाएं


27

5 छवियों के साथ मुझे ffmpeg में 60 सेकंड का वीडियो बनाना है, प्रत्येक छवि को 15 सेकंड के लिए प्रदर्शित करना है। 15 सेकंड के बाद, पहली छवि को फीका करना पड़ता है और दूसरी छवि को फीका करना पड़ता है, उसके बाद 2 वीं छवि को फीका करना पड़ता है, 3 डी छवि को फीका करना पड़ता है। कृपया मार्गदर्शन करें कि मैं ffmpeg कमांड का उपयोग करके इसे कैसे प्राप्त कर सकता हूं।


4
आपने क्या प्रयास किया है और फिर हम आपकी सहायता कर सकते हैं? यह मंच "कोई काम किए बिना कृपया मुझे जवाब न दें" प्रकार का मंच है। इसके साथ ही, मैं आपको ffmpeg फीके प्रलेखन की लिंक प्रदान करूंगा
माइक डिग्लियो

जवाबों:


49

काला करने के लिए डुबकी / फीका

क्रॉसफ़ेड विधि के लिए नीचे स्क्रॉल करें।

फीका उदाहरण

उदाहरण जहां प्रत्येक छवि 5 सेकंड के लिए प्रदर्शित होती है और प्रत्येक में एक फीका होता है जो 1 सेकंड तक रहता है। प्रत्येक छवि इनपुट में समान चौड़ाई, ऊंचाई और नमूना पहलू अनुपात होता है। यदि वे आकार में भिन्न होते हैं, तो उदाहरण # 3 नीचे देखें।

MP4 आउटपुट

ffmpeg \
-loop 1 -t 5 -i input0.png \
-loop 1 -t 5 -i input1.png \
-loop 1 -t 5 -i input2.png \
-loop 1 -t 5 -i input3.png \
-loop 1 -t 5 -i input4.png \
-filter_complex \
"[0:v]fade=t=out:st=4:d=1[v0]; \
 [1:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v1]; \
 [2:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \
 [3:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \
 [4:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v4]; \
 [v0][v1][v2][v3][v4]concat=n=5:v=1:a=0,format=yuv420p[v]" -map "[v]" out.mp4

ऑडियो के साथ

ऊपर के समान लेकिन ऑडियो के साथ:

ffmpeg \
-loop 1 -t 5 -i input0.png \
-loop 1 -t 5 -i input1.png \
-loop 1 -t 5 -i input2.png \
-loop 1 -t 5 -i input3.png \
-loop 1 -t 5 -i input4.png \
-i audio.m4a \
-filter_complex \
"[0:v]fade=t=out:st=4:d=1[v0]; \
 [1:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v1]; \
 [2:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \
 [3:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \
 [4:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v4]; \
 [v0][v1][v2][v3][v4]concat=n=5:v=1:a=0,format=yuv420p[v]" -map "[v]" -map 5:a -shortest out.mp4

भिन्न या मनमाने आकार वाली इनपुट छवियों के लिए

पहले उदाहरण की तरह, लेकिन इनपुट छवियों के साथ जो चौड़ाई x ऊंचाई में भिन्न होती है। इन्हें 1280x720 बॉक्स के भीतर फिट करने के लिए रखा जाएगा:

ffmpeg \
-loop 1 -t 5 -i input0.png \
-loop 1 -t 5 -i input1.png \
-loop 1 -t 5 -i input2.png \
-loop 1 -t 5 -i input3.png \
-loop 1 -t 5 -i input4.png \
-filter_complex \
"[0:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=out:st=4:d=1[v0]; \
 [1:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v1]; \
 [2:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \
 [3:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \
 [4:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v4]; \
 [v0][v1][v2][v3][v4]concat=n=5:v=1:a=0,format=yuv420p[v]" -map "[v]" out.mp4

यदि आप फ़सल (लेटरबॉक्स / पिलरबॉक्स) के बजाय फ़सल (स्क्रीन को भरना) चाहते हैं, या यदि आप अपसंस्कृति को रोकना चाहते हैं, तो स्थिर आकार के खिलाड़ी में फिट होने के लिए वीडियो को आकार देने में उदाहरण देखें ।

GIF आउटपुट

फ़िल्टर से जोड़ता है कि मैं उचित गुणवत्ता के साथ ffmpeg का उपयोग करके वीडियो को GIF में कैसे परिवर्तित करूं?

ffmpeg \
-framerate 10 -loop 1 -t 5 -i input0.png \
-framerate 10 -loop 1 -t 5 -i input1.png \
-framerate 10 -loop 1 -t 5 -i input2.png \
-framerate 10 -loop 1 -t 5 -i input3.png \
-framerate 10 -loop 1 -t 5 -i input4.png \
-filter_complex \
"[0:v]fade=t=out:st=4:d=1[v0]; \
 [1:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v1]; \
 [2:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \
 [3:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \
 [4:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v4]; \
 [v0][v1][v2][v3][v4]concat=n=5:v=1:a=0,split[v0][v1]; \
 [v0]palettegen[p];[v1][p]paletteuse[v]" -map "[v]" out.gif

-loopGIF लूप की संख्या को नियंत्रित करने के लिए आउटपुट विकल्प का उपयोग करें । यदि इस विकल्प का उपयोग नहीं किया जाता है तो डिफ़ॉल्ट अनंत लूप है। मान का -1कोई लूप नहीं है।

उपयोग किए गए विकल्प और फ़िल्टर:

  • -t प्रत्येक इनपुट के सेकंड में अवधि निर्धारित करने के लिए।

  • -loop 1 छवि को लूप करता है अन्यथा इसमें 1 फ्रेम की अवधि होगी।

  • -framerateइनपुट छवि फ्रेम दर (डिफ़ॉल्ट जब अघोषित 25 है) सेट करने के लिए। GIF बनाने के लिए उपयोगी।

  • एक विशिष्ट, समान आकार में इनपुट छवियों को फिट करने के लिए पैड के साथ स्केल (उदाहरण # 3 में प्रयुक्त)।

  • में और बाहर फीका करने के लिए फीका। dफीका की अवधि है। stजब यह शुरू होता है।

  • concat श्रेणीबद्ध करने के लिए (या "में शामिल होने के") प्रत्येक छवि।

  • यदि कोई MP4 और आउटपुट libx264 के साथ एन्कोडिंग है (जो आपके बिल्ड द्वारा समर्थित है तो MP4 आउटपुट के लिए डिफ़ॉल्ट एनकोडर) गैर-FFmpeg आधारित खिलाड़ियों के साथ संगत एक क्रोमा सबसम्पलिंग योजना को आउटपुट करने के लिए प्रारूप

  • एक फिल्टर आउटपुट की प्रतियां बनाने के लिए विभाजित । पैलेट द्वारा आवश्यक * एक कमांड में सब कुछ करने के लिए फ़िल्टर।

  • अच्छा दिखने GIF बनाने के लिए पैलेटजेन और पैलेट्यूज़


क्रॉसफ़ेड

क्रॉसफेड ​​उदाहरण

उदाहरण जहां प्रत्येक छवि 5 सेकंड के लिए प्रदर्शित होती है और प्रत्येक में एक क्रॉसफेड ​​होता है जो 1 सेकंड तक रहता है। प्रत्येक छवि इनपुट में समान चौड़ाई, ऊंचाई और नमूना पहलू अनुपात होता है। यदि वे आकार में भिन्न हैं तो ऊपर दिए गए # 3 उदाहरण को अपनाएं।

MP4 आउटपुट

ffmpeg \
-loop 1 -t 5 -i 1.png \
-loop 1 -t 5 -i 2.png \
-loop 1 -t 5 -i 3.png \
-loop 1 -t 5 -i 4.png \
-loop 1 -t 5 -i 5.png \
-filter_complex \
"[1]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+4/TB[f0]; \
 [2]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[f1]; \
 [3]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+12/TB[f2]; \
 [4]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+16/TB[f3]; \
 [0][f0]overlay[bg1];[bg1][f1]overlay[bg2];[bg2][f2]overlay[bg3]; \
 [bg3][f3]overlay,format=yuv420p[v]" -map "[v]" -movflags +faststart out.mp4

ऑडियो के साथ

ffmpeg \
-loop 1 -t 5 -i 1.png \
-loop 1 -t 5 -i 2.png \
-loop 1 -t 5 -i 3.png \
-loop 1 -t 5 -i 4.png \
-loop 1 -t 5 -i 5.png \
-i music.mp3 \
-filter_complex \
"[1]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+4/TB[f0]; \
 [2]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[f1]; \
 [3]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+12/TB[f2]; \
 [4]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+16/TB[f3]; \
 [0][f0]overlay[bg1];[bg1][f1]overlay[bg2];[bg2][f2]overlay[bg3]; \
 [bg3][f3]overlay,format=yuv420p[v]" -map "[v]" -map 5:a -shortest -movflags +faststart out.mp4

ऑडियो के साथ दो वीडियो के बीच क्रॉसफेड

प्रत्येक इनपुट से 5 सेकंड सेगमेंट चुनें और 1 सेकंड क्रॉसफ़ेड जोड़ें:

ffmpeg -i input0.mp4 -i input1.mp4 -filter_complex \
"[0:v]trim=start=5:end=10,setpts=PTS-STARTPTS[v0];
 [1:v]trim=start=12:end=17,setpts=PTS-STARTPTS+4/TB,format=yuva444p,fade=st=4:d=1:t=in:alpha=1[v1];
 [v0][v1]overlay,format=yuv420p[v];
 [0:a]atrim=start=5:end=10,asetpts=PTS-STARTPTS[a0];
 [1:a]atrim=start=12:end=17,asetpts=PTS-STARTPTS[a1];
 [a0][a1]acrossfade=d=1[a]" \
-map "[v]" -map "[a]" output.mp4

GIF आउटपुट

ffmpeg \
-framerate 10 -loop 1 -t 5 -i 1.png \
-framerate 10 -loop 1 -t 5 -i 2.png \
-framerate 10 -loop 1 -t 5 -i 3.png \
-framerate 10 -loop 1 -t 5 -i 4.png \
-framerate 10 -loop 1 -t 5 -i 5.png \
-filter_complex \
"[1]format=rgba,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+4/TB[f0]; \
 [2]format=rgba,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[f1]; \
 [3]format=rgba,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+12/TB[f2]; \
 [4]format=rgba,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+16/TB[f3]; \
 [0][f0]overlay[bg1];[bg1][f1]overlay[bg2];[bg2][f2]overlay[bg3];[bg3][f3]overlay,split[v0][v1]; \
 [v0]palettegen[p];[v1][p]paletteuse[v]" -map "[v]" out.gif

-loopGIF लूप की संख्या को नियंत्रित करने के लिए आउटपुट विकल्प का उपयोग करें । यदि इस विकल्प का उपयोग नहीं किया जाता है तो डिफ़ॉल्ट अनंत लूप है। मान का -1कोई लूप नहीं है।


1
@LordNeckbeard, इस उत्तर के लिए धन्यवाद, मैंने इसे दूसरे उदाहरण के लिए उपयोग किया। मैं अच्छी तरह से उस नंबर निम्नलिखित को समझ लिया है -tमें -loop 1 -t 1 -i 001.pngपरिभाषित करता है व्यक्तिगत फ्रेम की अवधि, और निम्नलिखित है कि संख्या T/के भीतर filter_complexब्लॉक संक्रमण की अवधि को परिभाषित करता है? और इस उदाहरण में फ़्रेम की अवधि को संक्रमण की अवधि सहित गिना जाता है या नहीं?
cincplug

1
@Nisarg यह संपूर्ण आउटपुट नहीं प्रतीत होता है और मुझे यकीन नहीं है कि यह आपके द्वारा पहले प्रदर्शित किए गए दो में से क्या है। वैसे भी, जोड़ने का प्रयास करें -preset ultrafast
16

1
@LordNeckbeard मुझे एक वीडियो फ़ाइल बनाने के लिए छवियों, वीडियो क्लिप और एक ऑडियो ट्रैक के एक संयोजन को सम्मिलित करने की आवश्यकता है (अधिमानतः ogg, लेकिन यह इस बिंदु पर कम प्रासंगिक है)। इसके अलावा, मुझे आसन्न छवियों के बीच कुछ संक्रमण प्रभाव बनाने की आवश्यकता है। Ffmpeg और / या अन्य कमांड लाइन टूल का उपयोग करके इस पूरे कार्य को स्क्रिप्ट करने का कोई तरीका है? लक्ष्य कमांड लाइन इंटरफ़ेस के माध्यम से कार्य को स्वचालित करना है।
वेब यूजर

1
@WebUser संक्रमण संभवत: उपयोग में आसान होने जा रहे हैं melt
ललगन

2
Ffmpeg दृष्टिकोण मेरे लिए अच्छी तरह से काम कर रहा है; धन्यवाद! पृष्ठ पर नए लोगों के लिए एक टिप; concat=n=9कमांड के हिस्से में, 95 छवियों से आता है उदाहरण + छवियों के बीच 4 संक्रमण। यदि आप विभिन्न चित्रों की संख्या संभाल रहे हैं, तो आपको उसी के अनुसार समायोजित करने की आवश्यकता होगी।
जिम मिलर

4

मैंने एक सामान्य बैश स्क्रिप्ट लिखी जो छवियों के एक फ़ोल्डर में ले जाती है , और ffmpeg के साथ एक क्रॉसफेड ​​वीडियो को आउटपुट करती है:

https://gist.github.com/anguyen8/d0630b6aef6c1cd79b9a1341e88a573e

स्क्रिप्ट अनिवार्य रूप से एक फ़ोल्डर में छवियों को देखती है और एक कमांड को प्रिंट करती है जो ऊपर @LordNeckbeard द्वारा उत्तर के समान है, और कमांड को निष्पादित करता है। यह स्क्रिप्ट तब मदद करती है जब आपके पास एक फ़ोल्डर में कई छवियां होती हैं और एक निराशाजनक रूप से लंबे कमांड में मैन्युअल रूप से टाइप नहीं करना चाहते हैं।


क्षमा करें, लेकिन आपकी स्क्रिप्ट ffmpeg 3.0.1 के साथ विफल हो जाती है, इनपुट # 0 से # 4 के साथ यह रिटर्न करता है: "फिल्टरग्राफ विवरण में अमान्य फाइल इंडेक्स 5"
क्रिज़्सटॉफ बोशुरको

TobySpeight: अच्छी बात है, मैंने उत्तर को अधिक स्पष्ट होने के लिए संपादित किया है। मूल रूप से मुख्य विचार पहले ही ऊपर दिए गए @LordNeckbeard द्वारा दिया गया है। यह लिपि बहुत सी छवियों का सामान्यीकरण करती है।
anh_ng8
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.