将位图数组转换为视频的效率更高

问题描述 投票:0回答:2

使用Jcodec库,我成功地通过一系列Bitmap对象在Android文件系统上生成并存储了视频文件。

但是,encoding时间花费的时间太长。我曾考虑过缩小每个位图以加快速度,但这似乎没有用。尽管进行了广泛的研究,但我仍在努力寻找有用的答案。

下面的代码当前是我创建位图的方式,其中canvasView.getWidth()canvasView.getHeight()分别对应于1920 x 1280

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;
}

我注意到,当您将这两个参数更改为较小的值时,即IE:

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

编码速度大大提高。

整个视图的大小为1920 x 1280,因此上面显示的createBitmap方法将仅捕获窗口的一小部分(256 x 256),这不是我所需要的。

[我需要帮助,找到一种方法来更有效地对视频中的位图数组进行编码,或者使用我正在使用的相同方法,但是在保持整个图像的可见性并加快编码过程的同时,缩小每个位图的比例。

android encoding bitmap android-canvas android-bitmap
2个回答
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


1
投票

我刚刚建立了一个没有外部库即可执行此项目的项目。

https://github.com/dburckh/bitmap2video

© www.soinside.com 2019 - 2024. All rights reserved.