获取本地视频文件的缩略图
2017-09-07 14:33
1551 查看
方法一:
非常简单,系统的api:
方法二:
这里在添加一个获取本地视频缩略图的方法,上面的方法一样 亲测可用:(获取的时候记得异步获取,不然会很卡的)
android.media.ThumbnailUtils这个类提供了3个静态方法一个用来获取视频第一帧得到的Bitmap,2个对图片进行缩略处理。
第一个参数是视频文件的路径,第二个参数是指定图片的大小,有两种选择Thumbnails.MINI_KIND与Thumbnails.MICRO_KIND。
第一种文档上说大小是512 x 384 ,我用一个MP4格式文件测试得到544 x 960,用一个wmv格式文件测试得到160 x 120。明显不靠谱。
第二种参数两种格式文件得到的大小都是 96 x 96,这个才是缩略图。
这两种方法都是用来处理Bitmap的大小的,第一个参数是要处理的Bitmap,第二个参数是处理后宽度,第三个是高度,第四个参数options,如果options
定义为OPTIONS_RECYCLE_INPUT,则回收资源。也就是说可以用第三种方法把截取到的视频第一帧的Bitmap转成任意想要的大小,第三个方法还可以获取
内存卡内图片的缩略图。
方法三:
上面的两个方法的话呢,只能获取到系统支持的视屏格式的缩略图,下面看一个在github上利用FFmpeg获取较全面的方法:
https://github.com/wseemann/FFmpegMediaMetadataRetriever
具体使用:
非常简单,系统的api:
public static Bitmap getVideoBitmap(String path) { Log.e("Icon", "path:" + path); MediaMetadataRetriever retriever = new MediaMetadataRetriever(); try { retriever.setDataSource(path); Bitmap frameAtTime = retriever.getFrameAtTime(); return frameAtTime; } catch (Exception e) { return null; } finally { retriever.release(); } }
方法二:
这里在添加一个获取本地视频缩略图的方法,上面的方法一样 亲测可用:(获取的时候记得异步获取,不然会很卡的)
android.media.ThumbnailUtils这个类提供了3个静态方法一个用来获取视频第一帧得到的Bitmap,2个对图片进行缩略处理。
public static Bitmap createVideoThumbnail (String filePath, int kind)
第一个参数是视频文件的路径,第二个参数是指定图片的大小,有两种选择Thumbnails.MINI_KIND与Thumbnails.MICRO_KIND。
第一种文档上说大小是512 x 384 ,我用一个MP4格式文件测试得到544 x 960,用一个wmv格式文件测试得到160 x 120。明显不靠谱。
第二种参数两种格式文件得到的大小都是 96 x 96,这个才是缩略图。
Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(path1, Thumbnails.MINI_KIND); bitmap = ThumbnailUtils.extractThumbnail(bitmap, 210, 210);
这两种方法都是用来处理Bitmap的大小的,第一个参数是要处理的Bitmap,第二个参数是处理后宽度,第三个是高度,第四个参数options,如果options
定义为OPTIONS_RECYCLE_INPUT,则回收资源。也就是说可以用第三种方法把截取到的视频第一帧的Bitmap转成任意想要的大小,第三个方法还可以获取
内存卡内图片的缩略图。
Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(path1, Thumbnails.MINI_KIND); bitmap = ThumbnailUtils.extractThumbnail(bitmap, 210, 210);
方法三:
上面的两个方法的话呢,只能获取到系统支持的视屏格式的缩略图,下面看一个在github上利用FFmpeg获取较全面的方法:
https://github.com/wseemann/FFmpegMediaMetadataRetriever
具体使用:
Bitmap bitmap = null; FFmpegMediaMetadataRetriever fFmpegMediaMetadataRetriever = new FFmpegMediaMetadataRetriever(); fFmpegMediaMetadataRetriever.setDataSource(mUri); //Bitmap bitmap = fFmpegMediaMetadataRetriever.getFrameAtTime(); Log.d("----->", fFmpegMediaMetadataRetriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_AUDIO_CODEC)); byte [] bytes = fFmpegMediaMetadataRetriever.getEmbeddedPicture(); if (bytes != null) { bitmap = BitmapUtils.decodeSampledBitmapFromResource(bytes, 50, 50); } fFmpegMediaMetadataRetriever.release(); return bitmap;
public static Bitmap decodeSampledBitmapFromResource(byte [] bytes, int reqWidth, int reqHeight) { // First decode with inJustDecodeBounds=true to check dimensions final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options); // Calculate inSampleSize options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); // Decode bitmap with inSampleSize set options.inJustDecodeBounds = false; return BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options); }
相关文章推荐
- android系统获取本地视频文件的缩略图
- 关于Android查询本地视频文件、获取缩略图,并且让缩略图以相同大小显示、给缩略图添加白色边框效果
- android 获取本地视频文件以及缩略图
- Android必知必会-获取视频文件的截图、缩略图
- 获取本地视频缩略图,既第一帧图片的方法
- 获取SD卡视频文件缩略图
- Android必知必会-获取视频文件的截图、缩略图
- 获取本地视频缩略图方法
- iOS获取本地视频和网络URL视频的缩略图方法
- Android获取SD卡上图片和视频文件及其缩略图
- Android:通过ThumbnailUtils类获取视频文件的缩略图
- Android 获取本地视频缩略图和某一帧的预览图
- Swift - 获取视频截图(本地视频、网络视频的缩略图)
- iOS 获取本地视频的缩略图
- Android获取本地图片、视频缩略图
- 获取视频文件的缩略图
- Android中如何获取视频文件的缩略图
- 获取本地视频缩略图
- Android中如何获取视频文件的缩略图
- Android中如何获取视频文件的缩略图