使用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),这不是我所需要的。
[我需要帮助,找到一种方法来更有效地对视频中的位图数组进行编码,或者使用我正在使用的相同方法,但是在保持整个图像的可见性并加快编码过程的同时,缩小每个位图的比例。
您可以使用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
我刚刚建立了一个没有外部库即可执行此项目的项目。