从Android中的MP4文件中提取特定秒的缩略图

时间:2016-01-01 10:56:55

标签: java android video

我有一个mp4文件列表,我需要为每个文件提取缩略图。

缩略图条件:

  1. 缩略图必须采用Base64格式

  2. 缩略图具有特定大小,将作为方法参数提供

  3. 必须从文件中间的帧中提取(例如,如果视频时长为10秒,则缩略图必须在第5秒内从帧中提取。

  4. 目前已实现1和2,但我不确定如何做3。

    这是我的代码:

    public static String getVideoDrawable(String path, int height, int width) throws OutOfMemoryError{
    
        try {
            Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(path, android.provider.MediaStore.Images.Thumbnails.MINI_KIND);
            bitmap = Bitmap.createScaledBitmap(bitmap, height, width, false);
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
            byte[] byteArray = byteArrayOutputStream .toByteArray();
    
            return Base64.encodeToString(byteArray, Base64.DEFAULT);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    

1 个答案:

答案 0 :(得分:2)

您需要使用MediaMetadataRetriever

MediaMetadataRetriever metadataRetriever = new MediaMetadataRetriever();
    try {
        metadataRetriever.setDataSource(path);
        String duration=metadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
        long time=Long.valueOf(duration)/2;
        Bitmap bitmap = metadataRetriever.getFrameAtTime(time,MediaMetadataRetriever.OPTION_NEXT_SYNC);
    //now convert to base64
    } catch (Exception ex) {
    }

http://developer.android.com/intl/es/reference/android/media/MediaMetadataRetriever.html#getFrameAtTime%28long,%20int%29