सही तरीके से काम करने के लिए, पहले वीडियो को RAW YUV बिटस्ट्रीम में कनवर्ट करें (यदि यह पहले से नहीं है):
ffmpeg -i input.mp4 -an -vcodec rawvideo -pix_fmt yuv420p rawbitstream.yuv
अगला चरण: select
फ़िल्टर एक अभिव्यक्ति लेता है , जहां n
फ्रेम नंबर है।
ffmpeg -r 2 -s WxH -i rawbitstream.yuv -filter:v select="mod(n-1\,2)" \
-c:v rawvideo -r 1 -format rawvideo -pix_fmt yuv420p -an odd.yuv
ffmpeg -r 2 -s WxH -i rawbitstream.yuv -filter:v select="not(mod(n-1\,2))" \
-c:v rawvideo -r 1 -format rawvideo -pix_fmt yuv420p -an even.yuv
ffmpeg
फ़्रेम को डुप्लिकेट नहीं करने के लिए , आपको अपने इनपुट के फ्रामरेट के आधे हिस्से को मजबूर करना होगा - इसलिए आप आउटपुट के लिए "2" को इनपुट के रूप में और "1" सेट करें। WxH को अपनी क्लिप के वास्तविक आयामों के साथ बदलना न भूलें क्योंकि कच्चे बिटस्ट्रीम में हेडर नहीं होता है जो इस जानकारी को वहन करता है।
उपरोक्त के बजाय, setpts
आउटपुट के लिए नए टाइमस्टैम्प सेट करने के लिए फ़िल्टर को जोड़ने की एक और संभावना होगी । लेकिन सावधान रहें क्योंकि यह फ्रेम को सही तरीके से नहीं गिराता है। यहां 25 वास्तविक आउटपुट फ्रेम दर है जो आप चाहते हैं:
ffmpeg -i input.mp4 -filter:v select="mod(n-1\,2)",setpts="N/(25*TB)" \
-c:v rawvideo -r 12.5 -format rawvideo -pix_fmt yuv420p -an odd.yuv
ffmpeg -i input.mp4 -filter:v select="not(mod(n-1\,2))",setpts="N/(25*TB)" \
-c:v rawvideo -r 12.5 -format rawvideo -pix_fmt yuv420p -an even.yuv
आप निश्चित रूप से एक और पिक्सेल प्रारूप (कोई भी ffmpeg -pix_fmts
) चुन सकते हैं । सुनिश्चित करें कि फ़ाइल पढ़ते समय आप पिक्सेल आकार और पिक्सेल प्रारूप जानते हैं:
ffmpeg -f rawvideo -s:v 1280x720 -pix_fmt yuv420p input.yuv …