android - 将视频文件转换为 gif

标签 android

我一直在尝试弄清楚如何在 android 中将视频文件转换为 gif。我在网上找到了一个类,AnimatedGifEncoder 类 ( https://github.com/nbadal/android-gif-encoder/blob/master/GifEncoder.java )。但它似乎并没有真正起作用。我在 AsnycTask 中包装了视频到 gif 的转换过程。代码如下所示:

@Override
protected String doInBackground(File[] files) {
    MediaMetadataRetriever mmr = new MediaMetadataRetriever();
    try {
        mmr.setDataSource(files[0].getPath());
    } catch (Exception e){
        Log.i("VMPF", e.toString());
    }
    //int framesRate = Integer.parseInt(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CAPTURE_FRAMERATE));
    int duration = Integer.parseInt(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION));
    Log.i("gifduration","" + duration);
    //Log.i("giffps","" + framesRate);
    int millisPerframe = 1000/24;
    int timeAt = 0;
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    AnimatedGifEncoder encoder = new AnimatedGifEncoder();
    encoder.setDelay(0);
    encoder.setRepeat(100);
    encoder.start(bos);
    while (timeAt < duration){
        encoder.addFrame(mmr.getFrameAtTime(timeAt));
        timeAt += millisPerframe;
        Log.i("wenfhluwhru", timeAt+"");
    }
    encoder.finish();
    Log.i("wenfhluwhru", "loop finished");
    FileOutputStream outStream = null;
    try {
        outStream = new FileOutputStream(path);
        outStream.write(bos.toByteArray());
        outStream.close();
        Log.i("wenfhluwhru", "outstream closed");
        return path;
    } catch(Exception e) {
        e.printStackTrace();
    }
    return null;
}

我的代码有问题吗(我假设 AnimatedGifEncoder 类没有问题)?我还考虑过将文件转换为 byte[] 并通过 Glidebyte[] 提交到 GifImageView code> 但我愿意猜测视频的 byte[] 与 gif 文件的不同(如果我错了,请告诉我)?

最佳答案

您可以在不同的时间找到帧并从中创建可绘制的动画

public void getGIF(){
    int counter = 0;
    Bitmap b = mmRetriever.getFrameAtTime(counter);
    while(counter < duration && b != null){
        frame = new BitmapDrawable(getResources(), b);
        animationDrawable.addFrame(frame, 50);
        counter += incrementor;
        b = mmRetriever.getFrameAtTime(counter);
    }
}

关于android - 将视频文件转换为 gif,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51067495/

相关文章:

java - Android中如何访问Activity对象

android - 如何获取 picasso 的最新版本代码

android - 从 Android Studio 中的 Firebase 存储中检索视频缩略图图像

java - JSON 数组问题

java - android rtsp 直播 - "Can' t 播放此视频”

java - 为什么不能更新连接到我的 android 应用程序的 MySQL 数据库?

Android 线性布局 : Add border with shadow around a LinearLayout

android - 如何覆盖 Android WebView 以使用自定义 Accept-Language header ?

android - 通知 native 音乐播放器音乐文件已添加到存储

Android:使用 Intent.ACTION_SEND/requestCode/resultCode 发送邮件/短信/推文?