如何在android中以编程方式将视频转换为gif

如何在android中以编程方式将视频转换为gif,android,Android,是否可以在Android中通过编程方式将录制的视频转换为GIF? 你能帮我写一些剪贴代码或者告诉我怎么做吗 我的建议是使用并调用getFrameAtTime()方法来检索要提取的帧: // Get your video file File myVideo = new File (Environment.getExternalStorageDirectory().getAbsolutePath(),

是否可以在Android中通过编程方式将录制的视频转换为GIF? 你能帮我写一些剪贴代码或者告诉我怎么做吗

我的建议是使用并调用
getFrameAtTime()
方法来检索要提取的帧:

// Get your video file
File myVideo = new File
         (Environment.getExternalStorageDirectory().getAbsolutePath(),
                                                               "YOUR_FILE.mp4");
// URI to your video file
Uri myVideoUri = Uri.parse(myVideo.toString());

// MediaMetadataRetriever instance
MediaMetadataRetriever mmRetriever = new MediaMetadataRetriever();
mmRetriever.setDataSource(myVideo.getAbsolutePath());

// Array list to hold your frames
ArrayList<Bitmap> frames = new ArrayList<Bitmap>();

//Create a new Media Player
MediaPlayer mp = MediaPlayer.create(getBaseContext(), myVideoUri);

// Some kind of iteration to retrieve the frames and add it to Array list
Bitmap bitmap = mmRetriever.getFrameAtTime(TIME IN MICROSECONDS);
frames.add(bitmap);
  • 在项目中导入
    ffmpeg
    ,抓取部分或整个视频并将其转换为gif

  • 使用
    MediaRetriever
    提取帧范围,只需在该范围内循环,然后转换为可绘制或位图,即可保存

  • SurfaceView文件夹
    SurfaceView
    画布播放视频时抓取帧


  • 你能告诉我如何得到所有的帧吗。它的循环是什么。你能回答吗?mmRetriever.setDataSource(myVideo.getAbsolutePath());你为什么要创建新的MediaPlayer?有必要吗?@Delagro,好像没用过。不知道我为什么这么做。很难说4年前我是怎么想的。虽然有效,但速度很慢。在完成这项工作后,我决定在云中创建GIF。
    AnimationDrawable animatedGIF = new AnimationDrawable();
    
    animationDrawable.addFrame("FIRST FRAME", 50);
    animationDrawable.addFrame("SECOND FRAME", 50);
    ...
    animationDrawable.addFrame("LAST FRAME ", 50);