Android有效地将位图数组转换为视频

时间:2018-02-26 00:12:18

标签: android encoding bitmap android-canvas android-bitmap

我已经使用Jcodec库来实现这一点,但编码时间过长。我考虑缩小每个位图以加快速度,我遇到了进一步的问题。我已经彻底搜寻了朝正确方向迈出的一步,但事实并非如此。

public Bitmap loadBitmapFromView(View v) {
    Bitmap b = Bitmap.createBitmap(canvasView.getWidth(), canvasView.getHeight(), Bitmap.Config.RGB_565);
    Log.i("Downloading", "OWidth: " + b.getWidth() + " --- " + "OHeight: " +  b.getHeight());

    Canvas c = new Canvas(b);
    c.drawColor(Color.WHITE);   // Essential

    v.draw(c);
    v.invalidate();
    v.requestLayout();

    return b;
}

这就是我创建位图的方法。当你改变前两个参数时我注意到了:

Bitmap.createBitmap(256, 256, Bitmap.Config.RGB_565);

更小的东西,就像上面的例子一样,编码速度急剧增加。

整个视图的大小是1920 x 1280,所以上面的函数只捕获了一小部分基本上没有意义。我需要帮助找到一种方法来更有效地将位图数组编码为视频或使用我正在使用的相同方法,但缩小每个位图,同时保持整个图像的可见性而不是裁剪。

2 个答案:

答案 0 :(得分:1)

我只是建立了一个无需外部库即可执行此操作的项目。

https://github.com/dburckh/bitmap2video

答案 1 :(得分:0)

您可以使用FFmpeg加快从图像或位图制作视频的过程

ffmpeg命令: -

        File dir = your directory where image stores;
        String filePrefix = "picture"; //imagename prefix
        String fileExtn = ".jpg";//image extention
        filePath = dir.getAbsolutePath();
        File src = new File(dir, filePrefix + "%03d" + fileExtn);// image name should ne picture001, picture002,picture003 soon  ffmpeg takes as input valid



complexCommand = new String[]{"-i", src + "", "-c:v", "libx264", "-c:a", "aac", "-vf", "setpts=2*PTS", "-pix_fmt", "yuv420p", "-crf", "10", "-r", "15", "-shortest", "-y", "/storage/emulated/0/" + app_name + "/Video/" + app_name + "_Video" + number + ".mp4"};

这里src =包含多个图像的目录路径

你可以使用writingminds库轻松地将ffmpeg集成到你的项目中

https://github.com/WritingMinds/ffmpeg-android-java

但ffmpeg增加了apk大小约18-20 mb