Ffmpeg के साथ वीडियो में पहले 30 सेकंड के लिए अपना लोगो कैसे जोड़ें?


9

मैं ffmpeg के साथ वीडियो में पहले 30 सेकंड के लिए अपना लोगो जोड़ने की कोशिश कर रहा हूं। मेरे पास एक वीडियो है d1.mp4और एक लोगो है जिसे बुलाया गया है logo.png

जब वीडियो शुरू होता है, तो वॉटरमार्क वीडियो के ऊपरी बाएं या शीर्ष दाएं कोने पर होना चाहिए और 30 सेकंड के बाद गायब हो जाना चाहिए।

क्या आप कृपया मुझे दिखा सकते हैं कि इसे कैसे जोड़ा जाए?


मेरे वीडियो का नाम d1.mp4 है और मेरे लोगो का नाम logo.png है, धन्यवाद ..
iwocan

फिर क्या ffmpeg -i d1.mp4 -i logo.pngदिखाता है? कृपया बस उस कमांड को दर्ज करें और हमें बताएं कि आउटपुट क्या है। जब ffmpegआप के बारे में प्रश्न पूछते हैं , तो आपके पास हमेशा यह होना चाहिए कि आपके पास कौन सा वीडियो / ऑडियो सामग्री है, जो आपने पहले से ही कोशिश की है, और आपके द्वारा कोशिश की गई चीजों की पूरी कमांड लाइन आउटपुट।
स्लैक

यहाँ मुझे अपने cmd स्क्रीन पर क्या मिलता है। pastebin.com/bPCnhXh2
iwocan

जवाबों:


13
ffmpeg -i in.mp4 -framerate 30000/1001 -loop 1 -i logo.png -filter_complex
  "[1:v] fade=out:st=30:d=1:alpha=1 [ov]; [0:v][ov] overlay=10:10 [v]" -map "[v]"
  -map 0:a -c:v libx264 -c:a copy -shortest out.mp4

यह मानता है कि लोगो एक अल्फा चैनल के साथ एक एकल छवि है और आप इसे 30000/1001 (NTSC दर) के फ्रेम दर के साथ एक वीडियो पर ओवरले करना चाहते हैं। -framerateअलग होने पर अपने इनपुट वीडियो से मिलान करने के लिए बदलें । अगर आपका लोगो वीडियो है तो omit करें -framerate 30000/1001 -loop 1। अगर लोगो के पास एक अल्फा चैनल नहीं है, तो format=yuva420p,तुरंत पहले जैसे उदाहरण डालकर एक जोड़ें fade

यह 1 सेकंड फीका आउट के बाद 30 सेकंड के लिए x, y स्थिति 10,10 पर लोगो प्रदर्शित करेगा।


1
बहुत ही रोचक! क्या आप बता सकते हैं कि क्यों framerateऔर loopइस मामले में आवश्यक हैं और फीके फिल्टर के बिना एक साधारण ओवरले के लिए नहीं?
राजिब

बहुत बहुत धन्यवाद mark40, लेकिन जब मैं यह कोड लिखता हूं, तो cmd स्क्रीन बंद नहीं होती है .. मुझे पता नहीं क्यों लेकिन यह मेरे लिए काम नहीं करता है ..
iwocan

हाय लॉर्डनेकर, यहाँ एक स्क्रीनशॉट है .. u1312.hizliresim.com/1j/4/v5ny8.png ..
iwocan

1
@ जीवासन मेरा मानना ​​है कि आप विंडो प्रॉम्प्ट से सामान बाहर कॉपी कर सकते हैं। मुझे लगा कि आप खोज करेंगे कि यह कैसे करना है, लेकिन विंडोज कमांड प्रॉम्प्ट से कॉपी टू क्लिपबोर्ड देखें
20

4
@ रजीब: -framerateऔर -loopअभी भी छवि के लिए कारण इतना है कि फीका बाहर काम करेगा। यदि केवल एक ही फ्रेम है तो 1 सेकंड के अंतराल पर बाहर फीका करने का कोई तरीका नहीं है। आदर्श रूप से यह वीडियो के समान फ्रेम दर होना चाहिए ताकि फीका जितना संभव हो उतना चिकना हो।
मार्क 4o

19

किसी वीडियो में लोगो जोड़ने के लिए overlayवीडियो फ़िल्टर का उपयोग करना :

यहां छवि विवरण दर्ज करें

ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay" \
-codec:a copy out.mp4

इस कमांड को समझने के लिए आपको यह जानना होगा कि स्ट्रीम स्पेसियर क्या है और FFmpeg फ़िल्टरिंग का परिचय पढ़ने से मदद मिलेगी। [0:v]पहले इनपुट ( video.mp4) के वीडियो स्ट्रीम (एस) को [1:v]संदर्भित करता है , और दूसरे इनपुट के वीडियो स्ट्रीम को संदर्भित करता है ( logo.mp4)। यह है कि आप कैसे overlayइनपुट का उपयोग करने के लिए बता सकते हैं। आप छोड़ सकते हैं [0:v][1:v], और overlayअभी भी काम करेंगे, लेकिन यह स्पष्ट होने की सलाह दी जाती है और संभवतः अज्ञात चूक पर भरोसा नहीं किया जाता है।

डिफ़ॉल्ट रूप से लोगो को ऊपरी बाएँ में रखा जाएगा।

ऑडियो का उपयोग करके स्ट्रीम को कॉपी-codec:a copy करेगा । यह केवल ऑडियो को पुन: एन्कोडिंग करने के बजाय पुन: मक्स करता है। इसे ऑडियो की "कॉपी और पेस्ट" के रूप में सोचें।

लोगो को घुमाते हुए

यह उदाहरण लोगो को 10 पिक्सेल दाईं ओर और 10 पिक्सेल नीचे ले जाएगा: यहां छवि विवरण दर्ज करें

ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay=10:10" \
-codec:a copy out.mp4

यह उदाहरण लोगो को दाईं ओर 10 पिक्सेल और 10 पिक्सेल नीचे ले जाएगा:

यहां छवि विवरण दर्ज करें

ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=main_w-overlay_w-10:10" -codec:a copy out.mp4

main_w"मुख्य" इनपुट (पृष्ठभूमि या [0:v]) overlay_wकी चौड़ाई को संदर्भित करता है , और "ओवरले" इनपुट (लोगो [1:v]) की चौड़ाई को संदर्भित करता है । इसलिए, उदाहरण में, इसका अनुवाद किया जा सकता है overlay=320-90-10:10या overlay=220:10

ओवरले का समय

कुछ फ़िल्टर समयरेखा संपादन को संभाल सकते हैं जो आपको यह निर्धारित करने के लिए अंकगणितीय अभिव्यक्तियों का उपयोग करने की अनुमति देता है जब एक फ़िल्टर लागू किया जाना चाहिए। का संदर्भ लें ffmpeg -filtersदेखने के लिए जो फिल्टर समर्थन समय संपादन।

यह उदाहरण 30 सेकंड तक लोगो को दिखाएगा:

ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=10:10:enable=between(t\,0\,30)" -codec:a copy out.mp4

यदि आप लोगो को फीका करना चाहते हैं तो mark4o के उत्तर को देखें ।


आपका बहुत बहुत धन्यवाद! :) मैं फिर से अपनी टूटी हुई अंग्रेजी के लिए माफी माँगता हूँ। यह आदेश सही काम करता है! :)
इवोकैन

अंत में कुछ समझ में आता है! शुरू से अंत में इसे प्रदर्शित करने के लिए मुझे क्या उपयोग करना चाहिए?
सिकतोमो

मैं शुरुआत में और अंत में दिखाई देने का मतलब था? दो बार। मैंने सक्षम करने की कोशिश की है = बीच (t \, 0 \, 30): enable = बीच (t \, 50 \, 60) को सक्षम किया है, लेकिन केवल अंतिम समय प्रभाव में है
cikatomo

@ सिकातोमो enable=not(between'(t,30,50)')। यह हर समय ओवरले दिखाएगा लेकिन 30-60 सेकंड की अवधि में नहीं।
ल्लगन

पूर्ण धन्यवाद। आपकी चेतावनी के बावजूद overlayसभी द्वारा इसका उपयोग नहीं करने के लिए , मैंने किया, क्योंकि शीर्ष बाईं ओर की डिफ़ॉल्ट स्थिति वही थी जो मैं चाहता था। (इसलिए अंत में मेरे झंडे बस थे filter_complex overlay।)
felwithe
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.