FFMPEG वाले वीडियो से एक क्लिप बनाएं


0

मैं FFmpeg के साथ हर mमिनट 2 सेकंड के वीडियो के साथ एक वीडियो बनाना चाहता हूं , जहां

m = video_length / 5

उदाहरण के लिए मेरे पास एक वीडियो है जो 10 मिनट लंबा है। वीडियो क्लिप की कुल लंबाई 10 सेकंड (5 खंड 2 सेकंड से) होगी और ये वीडियो टाइमस्टैम्प पर्वतमाला से बना होगा:

00:00 - 00:02
02:00 - 02:02
04:00 - 04:02
06:00 - 06:02
08:00 - 08:02

यह वीडियो से एक तरह का ट्रेलर तैयार करेगा।

मुझे पता है कि मैं उस सेगमेंट को हासिल कर सकता हूं लेकिन पूरी प्रक्रिया का पता नहीं लगा सकता।

जवाबों:


4

आप इसे एक बार में चुनिंदा फ़िल्टर का उपयोग करके कर सकते हैं

ffmpeg -i in.mp4
       -vf select='lt(mod(t,120),2)',setpts=N/FRAME_RATE/TB
       -af aselect='lt(mod(t,120),2)',asetpts=N/SR/TB
       out.mp4

कुछ याद आ रहा है: [पार्सड_सेलेक्ट_0 @ 0x7fe018d02440] [एवल @ 0x7fff56fb2460] मिसिंग ')' या 'मॉड (टी [पार्सड_सेप्ट_0 @ 0x7fe018d02440] पार्सिंग एक्सप्रेशन' लार्सिंग एक्सप्रेशन 'के दौरान त्रुटि: लार्सिंग एक्सप्रेशन के लिए' एर ' फिल्टर आरंभ आर्ग के साथ 'का चयन' 'लीटर (आधुनिक (टी' खोलने फिल्टर त्रुटि!
Kollo

1
लगता है कि आपको कॉमा से बचने की जरूरत है। 'lt(mod(t\,120)\,2)'
ज्ञान

हाँ बेहतर है, क्या आप थोड़ा सा लेफ्ट (मॉड और सेटिस्फेक्शन समझा सकते हैं क्योंकि यह वास्तव में 5 मिनट के वीडियो पर अपवादित परिणाम नहीं देता है। लगता है कि 120 सेकंड का समय है और वीडियो लंबाई के आधार पर एक संस्करण होना चाहिए? 10 मिनट का वीडियो मेरे प्रश्न में सिर्फ एक उदाहरण था, मुझे इसे सही करना पड़ सकता है।
कोलो

1
lt(mod(t,120),2)उन सभी फ़्रेमों का चयन करता है, जिनकी टाइमस्टैम्प 120 सेकंड के कई से 2 सेकंड से कम है। FFmpeg एक चर के रूप में स्ट्रीम अवधि को उजागर नहीं करता है, इसलिए आपको अवधि प्राप्त करने के लिए पहले से एक और कमांड चलाना होगा, इसे 5 से विभाजित करें और फिर इसे 120 के स्थान पर प्रतिस्थापित करें। चयनित फ़िल्टर चयनित फ़्रेमों के टाइमस्टैम्प को परिवर्तित नहीं करता है: इसलिए जब यह 3 वें मिनट से पहला फ्रेम चुनता है, तो फ्रेम उस टाइमस्टैम्प को बरकरार रखता है। प्लेबैक के दौरान, पहले मिनट से चुने गए अंतिम फ्रेम पर दो मिनट का फ्रीज होगा। टाइमस्टैम्प को विपरीत बनाने के लिए, सेटिफ़स का उपयोग किया जाता है।
ज्ञान

उत्तम! दुःख की बात है कि कोई अवधि अवधि नहीं है: /
kollo

0

मुझे एक विधि का पता है जिसका आप उपयोग कर सकते हैं। हालांकि यह थोड़ा गड़बड़ है।

इस तरह से कमांड के साथ क्लिप निकालें:

ffmpeg -i -ss <time to start> -t <duration> <output clip filename>

आप क्या करते हैं आप क्लिप को इस प्रारूप के साथ निकालते हैं, जहां -ssक्लिप की शुरुआत है, और क्लिप -tकी अवधि है। एक बार जब आपके पास निकाले जाते हैं, तो आप उन्हें एक साथ रख सकते हैं:

ffmpeg -i concat:"clip_file1|clip_file2|clip_file3" -c copy <your output file>

कृपया ध्यान दें कि इस प्रकार का संघनन सभी वीडियो प्रारूपों के साथ काम नहीं करता है, और आपको कुछ अन्य तर्कों में फेंकना पड़ सकता है, जैसे कि -bsf:a aac_adtstoascMP4 फ़ाइलें। लेकिन इससे आपको मनचाहा वीडियो मिलना चाहिए।

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