You can use the following code:
String SrcPath="/sdcard/Pictures/Video Task/"; MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever(); mediaMetadataRetriever.setDataSource(SrcPath); String METADATA_KEY_DURATION = mediaMetadataRetriever .extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); Bitmap bmpOriginal = mediaMetadataRetriever.getFrameAtTime(0); int bmpVideoHeight = bmpOriginal.getHeight(); int bmpVideoWidth = bmpOriginal.getWidth(); Log.d("LOGTAG", "bmpVideoWidth:'" + bmpVideoWidth + "' bmpVideoHeight:'" + bmpVideoHeight + "'"); byte [] lastSavedByteArray = new byte[0]; float factor = 0.20f; int scaleWidth = (int) ( (float) bmpVideoWidth * factor ); int scaleHeight = (int) ( (float) bmpVideoHeight * factor ); int max = (int) Long.parseLong(METADATA_KEY_DURATION); for ( int index = 0 ; index < max ; index++ ) { bmpOriginal = mediaMetadataRetriever.getFrameAtTime(index * 1000, MediaMetadataRetriever.OPTION_CLOSEST); bmpVideoHeight = bmpOriginal == null ? -1 : bmpOriginal.getHeight(); bmpVideoWidth = bmpOriginal == null ? -1 : bmpOriginal.getWidth(); int byteCount = bmpOriginal.getWidth() * bmpOriginal.getHeight() * 4; ByteBuffer tmpByteBuffer = ByteBuffer.allocate(byteCount); bmpOriginal.copyPixelsToBuffer(tmpByteBuffer); byte [] tmpByteArray = tmpByteBuffer.array(); if ( !Arrays.equals(tmpByteArray, lastSavedByteArray)) { int quality = 100; String mediaStorageDir="/sdcard/Pictures/Video Task/"; File outputFile = new File(mediaStorageDir , "IMG_" + ( index + 1 ) + "_" + max + "_quality_" + quality + "_w" + scaleWidth + "_h" + scaleHeight + ".png"); Log.e("Output Files::>>",""+outputFile); OutputStream outputStream = null; try { outputStream = new FileOutputStream(outputFile); } catch (FileNotFoundException e) { e.printStackTrace(); } Bitmap bmpScaledSize = Bitmap.createScaledBitmap(bmpOriginal, scaleWidth, scaleHeight, false); bmpScaledSize.compress(Bitmap.CompressFormat.PNG, quality, outputStream); try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } lastSavedByteArray = tmpByteArray; } } capturedImageView.setImageBitmap(bmpOriginal); mediaMetadataRetriever.release();
source share