使用android原生的MediaExtractor,MediaCodec和opengl抽取mp4视频文件的帧缩略图

最近在做一个类似抖音裁剪本地视频文件的需求. 效果图如下:


使用android原生的MediaExtractor,MediaCodec和opengl抽取mp4视频文件的帧缩略图_第1张图片
image.png

不考虑UI的实现, 涉及三个主要功能:

  1. 获取视频文件时长,
  2. 抽取视频文件的帧显示成一系列bitmap,
  3. 裁剪

我们项目处理视频使用的是腾讯的sdk(liteavsdk), 正好最近也在学习安卓多媒体相关的内容, 就想到, 能不能脱离腾讯的sdk, 使用安卓原生的系统接口来实现帧的截取. 查了一些资料, 试了一下, 是可以的. 而且从效率上来看, 跟腾讯sdk一致, 猜测它内部可能也是这么做的.

具体的代码在:
https://github.com/shaopx/VideoClipEditViewTest

基本上是根据https://bigflake.com/mediacodec/中的ExtractMpegFramesTest.java 修改得来的.

主要的修改思路

  1. 根据视频文件的时长, 和要截取的帧frame的间隔, 提前确定总的要截取的帧数, 和每一帧对应的时间点(毫秒数).
  2. 在通过MediaExtractor读取frame的过程中, 判断当前帧frame是否是要截取的帧, 怎么判断: 根据frame的时间点参数值
    如果是要截取的frame, 那么记录下这个frame的序号. 后面一步要用
  3. 在MediaCodec解码的过程中, 根据前一步记录的frame的序号值, 来判断是否需要把当前frame转换成bitmap

你可能感兴趣的:(使用android原生的MediaExtractor,MediaCodec和opengl抽取mp4视频文件的帧缩略图)