VLC या FFmpeg का उपयोग करके एक वीडियो में "हर 10 फ्रेम में से एक" निकालना


12

मैं एक वीडियो के "हर 10 फ्रेम के बिल्कुल 1 फ्रेम" निकालने की कोशिश कर रहा हूं (यानी 1 निकालें, 9 को फिर से दोहराएं) वैज्ञानिक उद्देश्यों के लिए। वीडियो 105 फ्रेम, 3.5 सेकंड, 29.97fps (h.264, .mov, Nikon D3100 द्वारा निर्मित) है।

मैंने इसे यहाँ अपलोड किया है

वीएलसी

नीचे कमांड में 10 फ्रेम का उत्पादन होना चाहिए, लेकिन यह केवल 6 छवियों का उत्पादन करता है। मैंने विभिन्न दृश्य अनुपातों की कोशिश की और उनमें से कोई भी सही संख्या में फ़्रेम का उत्पादन नहीं करता है (सही करने के लिए भी पास नहीं है)।

vlc 1.mov --video-filter=scene --vout=dummy --scene-ratio=10 --scene-prefix=img- --scene-path=. vlc://quit

क्या कोई मुझे बताएगा कि समस्या क्या है?

FFmpeg

FFmpeg के पास मेरे उद्देश्य के लिए एक कमांड नहीं है। नीचे कमान हर दूसरे में से 3 फ्रेम निकालती है, लेकिन चूंकि एफपीएस बिल्कुल 30 नहीं है (बल्कि 2.97), जो मेरे लिए सही परिणाम नहीं देगा।

इसके अलावा यहां तक ​​कि FFmpeg इस कमांड के साथ फ्रेम की सही संख्या भी नहीं देता है। 3.5 सेकंड के वीडियो के लिए मुझे सबसे अधिक 10 फ्रेम की उम्मीद है, लेकिन मुझे जो मिल रहा है वह 12 फ्रेम है!

ffmpeg -i 1.mov -y -an -sameq  -r 3 -f image2 -vcodec mjpeg %03d.jpg 

मैं जो चाहता हूं उसे कैसे हासिल कर सकता हूं?


1
BTW -sameqऐसा नहीं करता है जो आप शायद सोचते हैं कि यह करता है, और वर्तमान संस्करण से हटा दिया गया है (असली ffmpeg है, मुझे यकीन नहीं है कि यह उबंटू नकली ffmpeg में है)। इसके बजाय qscale का उपयोग करें।
स्टिब

जवाबों:


21

हर 10 फ्रेम में से 1 फ्रेम का चयन करें

ऐसा करने के लिए आप selectवीडियो फ़िल्टर का उपयोग कर सकते हैं ffmpeg:

ffmpeg -i input.mov -vf "select=not(mod(n\,10))" -vsync vfr -q:v 2 img_%03d.jpg
  • JPG आउटपुट के लिए आप गुणवत्ता के साथ भिन्न हो सकते हैं -q:v। प्रभावी रेंज 2 (सर्वोत्तम गुणवत्ता) से 31 (सबसे खराब गुणवत्ता) है। यदि आप इसके बजाय PNG में आउटपुट करना चाहते हैं तो आपको इस विकल्प की आवश्यकता नहीं है।

  • हो जाएगा ताकि उत्पादन img_001.jpg, img_002.jpg, img_003.jpg, आदि


बहुत दिलचस्प लगता है, लेकिन कुछ विशेष संस्करण या कुछ अतिरिक्त संकलित करने की आवश्यकता लगती है। मुझे unrecognized option '-filter:v'"FFmpeg वर्जन SVN-r0.5.1-4: 0.5.1-1ubuntu1.3" (--enable-avfilter --enable-avfilter-lavf --enable-vdpau-enable-bzlib --enable "के साथ " " मिलता है -लिबगम --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --disable-stripping --disable-vhook --enable-runtime-cpudetect - -enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static)
mivk

मैं भी कमांड नहीं चला सकता और ffmpeg विंडोज़ N-35709-g7d531e8 पर निम्न त्रुटि प्राप्त कर सकता हूं: [@ 017EBB00] [Eval @ 0022DC08] मिसिंग ') का चयन करें और' mod (n \ _, 10)) 'में बहुत सारे args चयन करें @ 017EBB00] त्रुटि को पार्स करते समय '(mod (n \ _, 10))' त्रुटि को प्रारंभ करने में फ़िल्टर 'चयन' को args के साथ नहीं (mod (n \ _, 10)) '' error opening filter!
wmac

उबंटू रेपो से @mivk आपके FFmpeg संस्करण में फ़िल्टरिंग क्षमताएं नहीं हैं। आपको FFmpeg को संकलित करना होगा ।
ललगन

1
@ मुझे लगता है कि विंडोज एकल उद्धरण पसंद नहीं करता है। उन्हें दोहरे उद्धरण चिह्नों में बदलें ":।
19

1
@LordNeckbeard, धन्यवाद, यह सही चलता है और पूरी समस्या को हल करता है। मैं वास्तव में आपकी मदद की सराहना करता हूं।
wmac

4

आपके प्रश्न में सबसे महत्वपूर्ण पहलू यह तथ्य है कि वीडियो प्रति सेकंड 29.97 फ्रेम का उपयोग करता है, 30 नहीं। पेस्की एनटीएससी।

वैसे भी, मुझे लगता है कि हर फ्रेम को निकालना आसान होगा , और फिर उन लोगों को हटा दें जिनकी आपको आवश्यकता नहीं है:

ffmpeg -i 1.mov -y -f image2 -c:v mjpeg %03d.jpg

फिर, उन लोगों को हटा दें जिनकी आपको आवश्यकता नहीं है। चूंकि हर दसवें फ्रेम के साथ समाप्त हो जाएगा 1.jpg, हम सिर्फ अन्य सभी ले सकते हैं ...

find . -maxdepth 1 -not -iname "*1.jpg"

... और एक बार जब आप सुनिश्चित कर लेते हैं कि ये वे हैं जिन्हें आप हटाना चाहते हैं:

find . -maxdepth 1 -not -iname "*1.jpg" -exec rm '{}' \;

आप उपयोग कर सकते हैं mencoder, तो आप की कोशिश कर सकते framestepहैं, विकल्प के रूप में समझाया दस्तावेज में , जैसे framestep=10आपके मामले में। मैं व्यक्तिगत रूप से इसे स्थापित / कोशिश नहीं कर सका।


1
आपकी मदद और आपके संपादन के लिए बहुत-बहुत धन्यवाद। मैं mencoder की कोशिश की और यहां तक ​​कि एक समस्या है! मुझे लगता है कि यह कोडेक या कंटेनर के साथ कुछ करना है। ffmpeg नीचे दिए गए कमांड के साथ बिल्कुल 105 फ्रेम निकालता है: ffmpeg -i 1.mov -y -an -sameq -f image2 -vcodec mjpeg% 03d.jpg लेकिन mencoder केवल 90 फ्रेम निकालता है !!! नीचे दिए गए आदेश के साथ: mplayer -vo png 1.mov framestep = 10 का उपयोग करना भी गलत संख्या में फ़्रेम का उत्पादन करता है। मैं हैरान हूँ कि कैसे तीनों (ffmpeg, vlc और mencoder) ऐसे सरल कार्य को सही ढंग से करने में असमर्थ हैं। मैंने VLC वेबसाइट को एक बग रिपोर्ट प्रस्तुत की। एक बार फिर धन्यवाद।
wmac

0

यदि आप पहले वीडियो को कच्चे rgb24 या rgb32 छवियों की श्रृंखला में संभवतः परिवर्तित करना चाहते थे, तो आप सही संख्या में फ्रेम प्राप्त करने में सक्षम हो सकते हैं क्योंकि मूल रूप में असामान्य फ्रेम प्रकारों को शामिल करना प्रतीत होता है जो शायद चित्र नहीं हैं ?? ?

मूल लेजर डिस्क में संपूर्ण वीडियो व्यक्तिगत फ्रेम नंबर 1 से 100,000 या अधिक के साथ छवियों की एक श्रृंखला से बना था, और जैसे कि भविष्य के रूपांतरण या जोड़तोड़ के लिए आधारभूत स्थापित करने का वास्तव में सही तरीका है।

उद्योग ने इस अजीब संपीड़न विचार को बदल दिया है ताकि केवल मौन को कम किया जा सके और संख्याओं को संभालने के सच्चे वैज्ञानिक रूपों को भ्रष्ट किया जा सके।

आपको पहले किसी भी ऑडियो को तरंग फ़ाइल के रूप में निकालना होगा ताकि ऑडियो को पूरी तरह से खोना न पड़े। ऐसा लगता है कि FFMPEG प्रत्येक निकाले गए चित्र में जानकारी की पहचान करता है, क्योंकि यदि आप केवल निकाले गए लोगों से एक साथ स्ट्रिंग छवियों का प्रयास करते हैं, और आप अन्य चित्रों को अन्य स्रोतों से समान एक्सटेंशन के साथ मिलाते हैं, तो ffmpeg उन छवियों को अनदेखा कर देगा जो आपने हर चीज के बीच में टुकड़े करने की कोशिश की थी। ।

लेज़र डिस्क प्रारूप के साथ, फ्रेम दर बस उस दर से निर्धारित होती है, जो आप अनुक्रमिक छवियों को प्रस्तुत करते हैं और किसी भी तरह से छवियों द्वारा खुद को नियंत्रित नहीं किया जाता है।

FFMPEG किसी भी तरह की छवियों के उचित हैंडलिंग और प्रदर्शन के लिए कला के बजाय विज्ञान से सबक ले सकता है। या संभवतः पूरे एवी उद्योग ही। उद्योग को वास्तव में हार्डवेयर की क्षमताओं में सुधार करने और कच्चे डेटा का उपयोग करने की आवश्यकता है जिसमें बहुत सारी मेमोरी / स्टोरेज की आवश्यकता होती है। कुछ भी नहीं सटीक और सटीकता के लिए कच्चे डेटा धड़कता है।

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