获取本地视频文件的缩略图
方法一:
非常簡單,系統的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
具體使用:
??
?
?
?
public static Bitmap decodeSampledBitmapFromResource(byte [] bytes,int reqWidth, int reqHeight) {// First decode with inJustDecodeBounds=true to check dimensionsfinal BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds = true;BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options);// Calculate inSampleSizeoptions.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);// Decode bitmap with inSampleSize setoptions.inJustDecodeBounds = false;return BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options);}?
?
?
總結
以上是生活随笔為你收集整理的获取本地视频文件的缩略图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 保理业务
- 下一篇: [译]C++17,使用 string_v