ffmpeg का उपयोग करके 2 वीडियो के बीच क्रॉसफ़ेड


27

मैं ffmpeg का उपयोग करते हुए 2 वीडियो क्लिप के बीच एक क्रॉसफ़ेड संक्रमण को प्राप्त करने की कोशिश कर रहा हूं, लेकिन अभी तक विफल रहा हूं। मैं ffmpeg के लिए नया हूं और मैं ज्यादातर उसी चीज पर भरोसा कर रहा हूं जो मैं प्रलेखन और मौजूदा उदाहरणों में ऑनलाइन पा सकता हूं। अब तक जो मैंने पढ़ा है, उसमें से मिश्रण या ओवरले फ़िल्टर का उपयोग करके मुझे जो कुछ भी हो, उसे प्राप्त करने में मदद करनी चाहिए, लेकिन मैं इसे प्राप्त करने के लिए कमांड लाइन के विवरण का पता नहीं लगा सकता।

फीका और concat फिल्टर के लिए महान हैं वीडियो 2 करने के लिए फीका-इन और 2 1 क्लिप में concat, फीका-आउट वीडियो 1 के प्रकार संक्रमण लेकिन मैं एक आदेश किसी भी बिना वीडियो 2 करने के लिए वीडियो 1 से संक्रमण के लिए हो रही में मदद की सराहना करेंगे, बीच में काला हो जाना । मुझे इस समस्या के लिए कहीं भी कोई भी उदाहरण नहीं मिला, शायद मैं गलत कीवर्ड खोज रहा हूँ ...?

अधिक speficially, मेरे वीडियो mp4s हैं (h264 वीडियो, कोई ध्वनि नहीं, मामले में जो मायने रखता है), प्रत्येक 5 सेकंड लंबा है और मैं लगभग एक संक्रमण के बाद हूँ। वीडियो 1 के 4.5 से वीडियो 2 के 0.5 एस।

एमएलटी और फ्रेम (उदाहरण के लिए 2:25 (उदाहरण के लिए फीका देखें)) का उपयोग करके यह जैसा दिखता है, वैसे ही, हालांकि मैं किसी अन्य प्रोग्स को कॉल किए बिना सिर्फ एफएफएमपी में ऐसा करने का तरीका ढूंढ रहा हूं। http://www.youtube.com/watch?v=3PRZ9L_KLdI

किसी भी संकेत या शायद इस तरह से एक फीका पाने के लिए एक कमांड लाइन बहुत सराहना की जाएगी, बहुत बहुत धन्यवाद!


जवाबों:


23

मैं इस तरह से करने का सुझाव देता हूं:

  • उसी अवधि के साथ काली पृष्ठभूमि बनाएं और आउटपुट वीडियो होना चाहिए
  • प्रत्येक वीडियो में अल्फा चैनल जोड़ें
  • प्रत्येक वीडियो में फीका अल्फा प्रभाव में जोड़ें
  • काली पृष्ठभूमि वाले प्रत्येक वीडियो पर ओवरले का उपयोग करें

तो प्रत्येक वीडियो में 2 वीडियो (5 सेकंड) के लिए क्रॉसफ़ेड जोड़ने की आज्ञा होनी चाहिए:

ffmpeg -i 1.mp4 -i 2.mp4 -f lavfi -i color=black -filter_complex \
"[0:v]format=pix_fmts=yuva420p,fade=t=out:st=4:d=1:alpha=1,setpts=PTS-STARTPTS[va0];\
[1:v]format=pix_fmts=yuva420p,fade=t=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS+4/TB[va1];\
[2:v]scale=960x720,trim=duration=9[over];\
[over][va0]overlay[over1];\
[over1][va1]overlay=format=yuv420[outv]" \
-vcodec libx264 -map [outv] out.mp4

यह 1 सेकंड (d = 1) के दौरान 4 सेकंड (st = 4) पर पहले वीडियो को फीका कर देगा, दूसरे सेकंड में फीका 1 सेकंड (d = 1) के दौरान 1 सेकंड (st = 0) पर ले जाएगा और इसे प्रदर्शित करता है 4 सेकंड (+ 4 / टीबी) के लिए समय आगे। फिर हम सिर्फ काले रंग के 9 सेकंड काटते हैं, इसे वीडियो आकार में आउटपुट करते हैं और सामान को ओवरले करते हैं।

आशा करता हूँ की ये काम करेगा।


हाय @ptQa, बहुत बहुत धन्यवाद, क्रॉसफ़ेड प्रभाव एक आकर्षण की तरह काम करता है। हालांकि आउटपुट वीडियो में क्या होता है, यह केवल मूल वीडियो के एक शीर्ष बाएं भाग को दिखाता है और बाकी फ्रेम गायब है। मैंने रिज़ॉल्यूशन को देखा, इनपुट 960 x 720 है और आउटपुट 320 x 240 है, लेकिन यह पूरे वीडियो को स्केल नहीं करता है, इसके बजाय बाईं ओर 320 x 240 अनुभाग को काटता है और दिखाता है कि आउटपुट वीडियो में, बाकी इनपुट वीडियो गायब है। क्या आपकी कमांड लाइन में कोई अतिरिक्त है जो इसे रोकता है?
मुगा

ओह, मुझे यह मिल गया है, आपको संकल्प के लिए काले रंग को भी मापना चाहिए। अद्यतन उत्तर देखें। मैंने ग्राफ़ को फ़िल्टर करने के लिए स्केल जोड़ा है।
ptQa

इसे हल किया, धन्यवाद। मैंने एक नमूना वीडियो अपलोड किया है जो किसी को भी एक्शन में देखना चाहता है, आप इसे एक्शन में देखना चाहते हैं, youtu.be/JqorgXAjjTo
मुगा

एक ही समस्या है; मेरे पास मेरे स्वयं के कुछ वीडियो पर काम करने का एक प्रकार है - धन्यवाद। प्रश्न: वीडियो फीचर्स के समान पैटर्न के बाद वीडियो के ऑडियो ट्रैक को भी कैसे क्रॉस-फ़ेड किया जा सकता है?
जिम मिलर

1
BTW, मुझे लगता है कि उत्तर के नमूना आदेश में कोई त्रुटि है - यह -i 1.mp4 -i 2.mp4...सही होना चाहिए ?
जिम मिलर

7

मैंने ऐसा किया है:

  • ffmpeg संस्करण N-77197-gdf2ce13
  • प्रत्येक 4 सेकंड के 2 वीडियो।
  • उनके बीच फीका से जुड़ने की जरूरत है।
  • वीडियो 25 एफपीएस हैं।

1) 1 के अंत में फीका बाहर (प्रकाश से अंधेरा) जोड़ें और 2 के संकेत पर फीका (अंधेरे से प्रकाश)

ffmpeg -i 1.mp4 -y -vf fade=out:76:24 1f.mp4

ffmpeg -i 2.mp4 -y -vf fade=in:0:25 2f.mp4

76:24 का मतलब है फीका आउट फ्रेम 76 शुरू होगा और 24 फ्रेम बाद में खत्म होगा = 1s फीका आउट।

0:25 का मतलब है फीका इन फ्रेम 0 शुरू होगा और बाद में 25 फ्रेम खत्म करेगा।

2) 2 वीडियो मर्ज करें

सभी को TS में बदलें

ffmpeg -i 1f.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts 1f.ts

ffmpeg -i 2f.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts 2f.ts

मर्ज

ffmpeg -i "concat:1f.ts|2f.ts" -bsf:a aac_adtstoasc -c copy output.mp4

करने के लिए धन्यवाद:

http://www.bogotobogo.com/FFMpeg/ffmpeg_fade_in_fade_out_transitions_effects_filters.php


6
यह एक क्रॉसफेड ​​नहीं है।
ज्ञान

4
@Mulvya ने क्या कहा। एक क्रॉसफ़ेड एक क्लिप को उसी समय बाहर निकालता है, जब दूसरा फ़ेडिंग कर रहा होता है। पहली क्लिप में क्रॉसफ़ेड की अवधि में लगातार पारदर्शिता बढ़ जाती है; दूसरी बार इसकी पारदर्शिता लगातार कम हुई है।
intuited

7

ffmpeg-concat आप जो चाहते हैं उसे पूरा करने का सबसे आसान तरीका है और आप डिफ़ॉल्ट रूप से क्रॉसफ़ेड होने के साथ सेक्सी ओपनजीएल संक्रमण का एक गुच्छा उपयोग करने की अनुमति देता है।

ffmpeg-gl-transition एक कस्टम ffmpeg फ़िल्टर है जो आपको दो वीडियो स्ट्रीम के बीच सुचारू रूप से संक्रमण के लिए GLSL का उपयोग करने की अनुमति देता है। यह फ़िल्टर यहां सूचीबद्ध विकल्पों की तुलना में उपयोग करना और अनुकूलित करना काफी आसान है।

यह फ़िल्टर संक्रमण प्रकारों की एक बड़ी सूची का समर्थन करता है , डिफ़ॉल्ट रूप से क्रॉसफ़ेड है।

./ffmpeg -i 0.mp4 -i 1.mp4 -filter_complex "gltransition=duration=4:offset=1.5" out.mp4

4
क्या आपने FFmpeg को एक पैच सबमिट करने पर विचार किया है?
लोलगन

1
मैं निश्चित रूप से करूंगा, मुझे केवल कुछ छोटे मुद्दों को ठीक करने और पहले अधिक परीक्षण करने की आवश्यकता है। अच्छा निर्णय!
fisch2

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