FFmpeg उन वीडियो से छवियों को कैप्चर कर सकता है जिनका उपयोग वीडियो को दर्शाने के लिए थंबनेल के रूप में किया जा सकता है। ऐसा करने के अधिकांश सामान्य तरीके FFmpeg Wiki में कैप्चर किए जाते हैं ।
लेकिन, मैं कुछ अंतराल पर यादृच्छिक फ्रेम नहीं चुनना चाहता। मुझे दृश्य परिवर्तनों को पकड़ने के लिए FFmpeg पर फिल्टर का उपयोग करते हुए कुछ विकल्प मिले:
फ़िल्टर thumbnail
वीडियो में सबसे अधिक प्रतिनिधि फ्रेम खोजने की कोशिश करता है:
ffmpeg -i input.mp4 -vf "thumbnail,scale=640:360" -frames:v 1 thumb.png
और निम्न आदेश केवल उन फ़्रेमों का चयन करता है जिनमें पिछले की तुलना में 40% से अधिक परिवर्तन हैं (और शायद दृश्य परिवर्तन हैं) और 5 पीएनजी का अनुक्रम उत्पन्न करता है।
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.4),scale=640:360" -frames:v 5 thumb%03d.png
उपरोक्त आदेशों की जानकारी का श्रेय फैबियो सोननती को दिया जाता है । दूसरे को बेहतर लग रहा था क्योंकि मैं n चित्र प्राप्त कर सकता था और सर्वश्रेष्ठ चुन सकता था। मैंने इसे आजमाया और इसने 5 बार एक ही छवि बनाई।
कुछ और जांच ने मुझे इस ओर अग्रसर किया:
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.5)" -frames:v 5 -vsync vfr out%02d.png
-vsync vfr
यह सुनिश्चित करता है कि आपको अलग-अलग चित्र मिलें। यह अभी भी हमेशा वीडियो के पहले फ्रेम को चुनता है, ज्यादातर मामलों में पहला फ्रेम क्रेडिट / लोगो है और सार्थक नहीं है, इसलिए मैंने -ss
वीडियो के पहले 3 सेकंड को छोड़ने के लिए एक 3 जोड़ा ।
मेरा अंतिम आदेश इस तरह दिखता है:
ffmpeg -ss 3 -i input.mp4 -vf "select=gt(scene\,0.5)" -frames:v 5 -vsync vfr out%02d.jpg
यह सबसे अच्छा मैं कर सकता था। मैंने देखा है कि चूंकि मैं केवल 5 वीडियो चुनता हूं, उनमें से ज्यादातर वीडियो की शुरुआत से हैं और बाद में वीडियो में आने वाले महत्वपूर्ण दृश्यों को याद कर सकते हैं
मैं आपके दिमाग को किसी अन्य बेहतर विकल्प के लिए चुनना चाहूंगा।
mjpeg
मेरे लिए एनकोडर का भी उपयोग करता है , और मैंने भी जाँच की jpegoptim
और exiv2
, दोनों ही आपके उदाहरण कमांड्स के सभी JPG परिणामों के साथ मेरे लिए ठीक काम करते हैं।
libopenjpeg
.. यकीन नहीं होता कि फर्क पड़ता है।