में वीडियो से बिटमैप निकालें मैं एक वीडियो से सभी फ्रेम निकालने की कोशिश कर रहा हूं।
कोड का पालन करके मैं एक वीडियो के पहले 30 फ्रेम लाने के लिए चाहता हूं, लेकिन मुझे केवल 30 फ्रेम पहले फ्रेम मिल गया।एंड्रॉइड
private ArrayList<Bitmap> getFrames(String path) {
try {
ArrayList<Bitmap> bArray = new ArrayList<Bitmap>();
bArray.clear();
MediaMetadataRetriever mRetriever = new MediaMetadataRetriever();
mRetriever.setDataSource("/sdcard/myvideo.mp4");
for (int i = 0; i < 30; i++) {
bArray.add(mRetriever.getFrameAtTime(1000*i,
MediaMetadataRetriever.OPTION_CLOSEST_SYNC));
}
return bArray;
} catch (Exception e) { return null; }
}
अब, मैं वीडियो से सभी फ्रेम कैसे प्राप्त कर सकता हूं?
'getFrameAtTime' को दिया गया समय microseconds में दिया गया है, इसलिए 30 एफपीएस वीडियो के लिए प्रत्येक फ्रेम के बीच लगभग 33333 माइक्रोसॉन्ड होंगे। आपके कोड को पढ़ने का प्रयास करने वाला अंतिम फ्रेम 30000 माइक्रोसॉन्ड पर है - यानी आप दूसरे फ्रेम तक आगे बढ़े नहीं होंगे (पाठ्यक्रम की आपकी फ्रेम दर के आधार पर)। दूसरी बात यह है कि 'OPTION_CLOSEST_SYNC' आपके द्वारा निर्दिष्ट समय के निकट _keyframe_ को पुनर्प्राप्त करता है। संपीड़ित वीडियो में कुल फ्रेम की तुलना में आम तौर पर कम कीफ्रेम होते हैं। – Michael
हैलो @ माइकल, 30 एफपीएस के साथ मेरा वीडियो। और अब मैं निकालने बिटमैप्स के लिए कोड निम्न का उपयोग कर रहा .... के लिए (int i = 0; i <10; i ++) { \t \t \t \t bArray.add (mRetriever.getFrameAtTime (33333 * मैं, \t \t \t \t \t \t MediaMetadataRetriever.OPTION_CLOSEST_SYNC)); \t \t \t} लेकिन कुछ भी नहीं बदला जा सकता है .. यहां मुझे बिटमैप में केवल पहला फ्रेम मिला है .. –
जैसा कि मैंने अपनी पहली टिप्पणी में लिखा था, आप 'OPTION_CLOSEST_SYNC' का उपयोग करते समय दिए गए समय के निकटतम कीफ्रेम पुनर्प्राप्त कर रहे हैं। यह असंभव नहीं है कि वीडियो में प्रत्येक कीफ्रेम के लिए 10 या अधिक फ्रेम शामिल हैं। यदि आप केवल कीफ्रेम के बजाय किसी भी प्रकार का फ्रेम प्राप्त करना चाहते हैं तो 'OPTION_CLOSEST' का उपयोग करें। – Michael