Android视频处理 --处理视频第一帧缩略图

从API 8开始,新增了一个类:

android.media.ThumbnailUtils这个类提供了3个静态方法一个用来获取视频第一帧得到的Bitmap,2个对图片进行缩略处理。

?


1

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,这个才是缩略图。

?


1

2

extractThumbnail(Bitmap source, int width, int height, int options)

extractThumbnail(Bitmap source, int width, int height)

这两种方法都是用来处理Bitmap的大小的,第一个参数是要处理的Bitmap,第二个参数是处理后宽度,第三个是高度,第四个参数options,如果options定义为OPTIONS_RECYCLE_INPUT,则回收资源。也就是说可以用第三种方法把截取到的视频第一帧的Bitmap转成任意想要的大小,第三个方法还可以获取内存卡内图片的缩略图。

?


1

2

Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(path1, Thumbnails.MINI_KIND); 

bitmap = ThumbnailUtils.extractThumbnail(bitmap, 210, 210);

从API 10开始新增一类MediaMetadataRetriever可以用来获取媒体文件的信息

?


1

2

3

4

5

6

7

MediaMetadataRetriever mmr = new MediaMetadataRetriever(); 

mmr.setDataSource(/sdcard/33.mp4); 

Bitmap bitmap = mmr.getFrameAtTime(); 

image.setImageBitmap(bitmap); 

System.out.println(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE)+); 

System.out.println(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE)+); 

mmr.release();

MediaMetadataRetriever可以获取视频任何一帧的缩略图。

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

public static Bitmap createVideoThumbnail(String filePath) { 

    // MediaMetadataRetriever is available on API Level 8 

    // but is hidden until API Level 10 

    Class<!--?--> clazz = null

    Object instance = null

    try

        clazz = Class.forName(android.media.MediaMetadataRetriever); 

        instance = clazz.newInstance(); 

  

        Method method = clazz.getMethod(setDataSource, String.class); 

        method.invoke(instance, filePath); 

  

        // The method name changes between API Level 9 and 10. 

        if (Build.VERSION.SDK_INT <= 9) { 

            return (Bitmap) clazz.getMethod(captureFrame).invoke(instance); 

        } else

            byte[] data = (byte[]) clazz.getMethod(getEmbeddedPicture).invoke(instance); 

            if (data != null) { 

                Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); 

                if (bitmap != null) return bitmap; 

            

            return (Bitmap) clazz.getMethod(getFrameAtTime).invoke(instance); 

        

    } catch (IllegalArgumentException ex) { 

        // Assume this is a corrupt video file 

    } catch (RuntimeException ex) { 

        // Assume this is a corrupt video file. 

    } catch (InstantiationException e) { 

        Log.e(TAG, createVideoThumbnail, e); 

    } catch (InvocationTargetException e) { 

        Log.e(TAG, createVideoThumbnail, e); 

    } catch (ClassNotFoundException e) { 

        Log.e(TAG, createVideoThumbnail, e); 

    } catch (NoSuchMethodException e) { 

        Log.e(TAG, createVideoThumbnail, e); 

    } catch (IllegalAccessException e) { 

        Log.e(TAG, createVideoThumbnail, e); 

    } finally

        try

            if (instance != null) { 

                clazz.getMethod(release).invoke(instance); 

            

        } catch (Exception ignored) { 

        

    

    return null

}

推推族,免费得门票,游景区:www.tuituizu.com

结伴旅游,一个免费的交友网站:www.jieberu.com

时间: 2024-10-13 01:04:39

Android视频处理 --处理视频第一帧缩略图的相关文章

Android -- 获取视频第一帧缩略图

干货 从API 8开始,新增了一个类: android.media.ThumbnailUtils这个类提供了3个静态方法一个用来获取视频第一帧得到的Bitmap,2个对图片进行缩略处理. public static Bitmap createVideoThumbnail (String filePath, int kind) 第一个参数是视频文件的路径,第二个参数是指定图片的大小,有两种选择Thumbnails.MINI_KIND与Thumbnails.MICRO_KIND. 第一种文档上说大小

Android之使用ThumbnailUtils类来获取视频第一帧缩略图

一.首先,来介绍ThumbnailUtils类,此类位于android.media包下,此类有一个公有的无参构造函数,有三个静态的公有方法,一个用来获取视频第一帧得到的Bitmap,另外两个方法用来对图片进行缩略处理. 1.无参的构造函数:ThumbnailUtils() 2.三个静态的公有方法: (1).创建一个视频缩略图的方法: public static Bitmap createVideoThumbnail(String filePath, int kind) 第一个参数为视频文件的

iOS开发之视频根据url获取第一帧图片,获取任一帧图片

+ (UIImage*) thumbnailImageForVideo:(NSURL *)videoURL atTime:(NSTimeInterval)time {  AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil]; NSParameterAssert(asset); AVAssetImageGenerator *assetImageGenerator =[[AVAssetImageGenera

Android之使用MediaMetadataRetriever类获取视频第一帧

一.首先,来介绍一下MediaMetadataRetriever类,此类位于android.media包下,这里,先附上可查看此类的API地址:MediaMetadataRetriever类.大家能够自行查看. 1.MediaMetadataRetriever类概述:MediaMetadataRetriever class provides a unified interface for retrieving frame and meta data from an input media fil

通过 ffmpeg 获取视频第一帧(指定时间)图片

最近做一个上传教学视频的方法,上传视频的同时需要上传视频缩略图,为了避免用户上传的缩略图与视频内容不符,经理要求直接从上传的视频中截图视频的某一帧作为缩略图,并给我推荐了FFMPEG.FFMPEG 功能很强大,做视频必备的软件. FFMPEG下载地址:https://ffmpeg.org/download.html 1.VideoThumbTaker.java 获取视频指定播放时间的图片 package video;import java.io.IOException;import java.i

获取视频的第一帧

public static Bitmap getVideoFirstFrame(Context context, Uri uri) { Bitmap bitmap = null; String className = "android.media.MediaMetadataRetriever"; Object objectMediaMetadataRetriever = null; Method release = null; try { //反射获取视频第一帧 objectMedia

关于video标签移动端开发遇到的问题,获取视频第一帧,全屏,自动播放,自适应等问题

最近一直在处理video标签在IOS和Android端的兼容问题,其中遇到不少坑,绝大多数问题已经解决,下面是处理问题经验的总结: 1.获取视频的第一帧作为背景图: 技术:canvas绘图 window.onload = function(){ var video = document.getElementById('video'); //使用严格模式 'use strict'; //第一帧图片与原视频的比例 var scal = 0.8; //监听页面加载事件 video.addEventLi

第五十二篇、 OC获取视频的第一帧图片thumbnailImage

获取视频的第一帧图片 有时候我们拍摄完视频后,希望获取一张图片当作这个视频的介绍,这个图片thumbnailImage可以从视频的第一帧获取到. 我们的思路是先获取视频的URL,然后初始化一个MPMoviePlayerController做工具,利用MPMoviePlayerController来拿图片,看具体代码如下: - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWit

视频转码成mp4格式,添加关键帧,添加元数据,把元数据放在第一帧,可拖动

作者测试是在windows下使用,所以下载的页面地址是: http://ffmpeg.zeranoe.com/builds/点击页面上的Download FFmpeg git-738ebb4 64-bit Static(我是64位的),如果你是32位点击 Download FFmpeg git-738ebb4 32-bit Static下载下来解压缩后我把文件夹改成了ffmpeg放在D盘下面运行三个文件:D:ffmpeg/bin/ffmpeg.exeD:ffmpeg/bin/ffplay.exe