मैं एक वीडियो क्लिप से मुख्य फ्रेम निकालने की कोशिश कर रहा हूं। मैंने निम्नलिखित कमांड की कोशिश की, लेकिन यह सभी फ़्रेमों को निकालता है।
ffmpeg -vf select="eq(pict_type\,PICT_TYPE_I)" -i 2.flv -vsync 2 -s 73x41 -r 30 -f image2 thumbnails-%%02d.jpeg
मैं एक वीडियो क्लिप से मुख्य फ्रेम निकालने की कोशिश कर रहा हूं। मैंने निम्नलिखित कमांड की कोशिश की, लेकिन यह सभी फ़्रेमों को निकालता है।
ffmpeg -vf select="eq(pict_type\,PICT_TYPE_I)" -i 2.flv -vsync 2 -s 73x41 -r 30 -f image2 thumbnails-%%02d.jpeg
जवाबों:
आप वीडियो फ़िल्टर -skip_frameकी आवश्यकता के बिना इस सरल का उपयोग कर सकते हैं select:
ffmpeg -skip_frame nokey -i 2.flv -vsync 0 -r 30 -f image2 thumbnails-%02d.jpeg
-threads 1डिफ़ॉल्ट की तुलना में इसका उपयोग करना सुनिश्चित करें , -threads autoयह मेरे सिस्टम पर उपवास के रूप में एक cropdetectफिल्टर ग्राफ ( ffmpeg -threads 1 -skip_frame nokey -i input.mkv -filter:v select='not(mod(n\,20))',cropdetect -an -f null /dev/null) 2x बनाता है (60s 30 से नीचे)!
-threads 1है कि अन्यथा आउटपुट कीफ्रेम के अनुक्रम को आउट-ऑफ-ऑर्डर जारी किया जा सकता है। यदि आपके पास इस समस्या से निपटने के कुछ प्रकार के बाद के तरीके हैं, तो आप मल्टी-थ्रेडिंग को बरकरार रख सकते हैं। इसके अलावा, ऐसा लगता है कि अभी भी आउट-ऑफ-ऑर्डर कीफ्रेम प्राप्त करना संभव है, यहां तक कि उपयोग करते समय भी -threads 1 , लेकिन अब इस मामले में ऐसी सभी घटनाएं एक h264 डिकोडर त्रुटि के साथ / झंडी दिखाती हैं illegal short term buffer state detected।
selectऔर scaleफिल्टर का उपयोग करके उदाहरण :
ffmpeg -i 2.flv -vf "select=eq(pict_type\,I),scale=73x41" \
-vsync vfr -qscale:v 2 thumbnails-%02d.jpeg
कुछ सुझाव:
फ़िल्टर -iविकल्प से पहले नहीं आने चाहिए , क्योंकि वे एक आउटपुट विकल्प हैं। मुझे नहीं पता कि वास्तव में आपको कहां से कमान मिली है, लेकिन PICT_TYPE_Iमौजूद नहीं है - यह होना चाहिए I।
में scaleफिल्टर आप की जगह ले सकता 73है या 41जैसे: फिल्टर करने के लिए स्वचालित रूप से चौड़ाई या ऊंचाई पक्षानुपात बनाए रखने के गणना scale=73:-1या scale=-1:41। यह स्ट्रेचिंग या स्क्विशिंग को रोकता है जो "मजबूर" स्केलिंग के परिणामस्वरूप हो सकता है।
आउटपुट गुणवत्ता को -qscale:v(या उपनाम -q:v) के साथ नियंत्रित किया जा सकता है । प्रभावी रेंज 2 से 31 का एक रैखिक पैमाने है और एक कम मूल्य एक उच्च गुणवत्ता है।
अपने यही कारण है कि ffmpegएक फिल्टर से पहले इनपुट मुझसे कहता है की अनुमति देता है यह पुराना हो सकता है। अपने ऑपरेटिंग सिस्टम के लिए हाल ही में स्थैतिक बिल्ड डाउनलोड करें, या यदि ऊपर काम नहीं करता है तो संकलन गाइड के अनुसार इसे स्वयं बनाएं ।
ffmpeg -i 2.flv -vf "select=eq(pict_type\,I)" -vsync vfr frame-%02d.png
यदि यह त्रुटियां errors
विकल्प vf (वीडियो फिल्टर सेट करें) इनपुट url 1508.mp4 पर लागू नहीं किया जा सकता - आप आउटपुट फ़ाइल या इसके विपरीत इनपुट विकल्प लागू करने का प्रयास कर रहे हैं। इस विकल्प को उस फ़ाइल से पहले ले जाएँ, जिसका वह संबंधित है। इनपुट फ़ाइल 1508.mp4 के लिए पार्स करने के विकल्प में त्रुटि। इनपुट फ़ाइलों को खोलने में त्रुटि: अमान्य तर्क
तुम यह केर सकते हो:
ffmpeg -i 263.mp4 -vf select=eq(pict_type\,PICT_TYPE_I) -vsync 2 -s 480x320 -r 24 -f image2 thumbnails-%05d.jpeg
== --------------------------------------------
"-I" पैरामीटर पहले से