【问题标题】:Efficiently converting an array of bitmaps to video有效地将位图数组转换为视频
【发布时间】:2018-02-26 00:12:17
【问题描述】:

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

但是,编码时间太长了。我考虑缩小每个位图以加快速度,但这似乎不起作用。尽管进行了广泛的研究,但我还是很难找到有用的答案。

以下代码是我目前创建位图的方式,其中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


    【解决方案1】:

    我刚刚提出了这个没有外部库的项目。

    https://github.com/dburckh/bitmap2video

    【讨论】:

      【解决方案2】:

      您可以使用 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

      【讨论】:

      • 我怎样才能完全使用 Ffmpeg。你解释一下?谢谢!
      • 太棒了,但我没有图像目录,我在代码中有一组位图。这也适用于那个吗?
      • 你可以,但是位图应该更小,否则会发生内存不足错误,所以我建议先将图像存储在内部存储中然后访问它
      猜你喜欢
      • 2011-09-23
      • 2020-05-30
      • 1970-01-01
      • 1970-01-01
      • 2019-11-02
      • 2020-04-27
      • 2021-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多