首页 > 解决方案 > 如何将特定视图整平录制到视频中?

问题描述

我正在使用Lottie 动画库,我想将该动画视图录制为视频,但该库没有任何视频导出支持,因此我正在尝试找到自己的解决方案,并且,

这是我到目前为止所尝试的。

    animationView.addAnimatorUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

        @Override
        public void onAnimationUpdate(ValueAnimator valueAnimator) {

            if((animationView.getFrame()) != previous ){
                // getting single frame
                previous = animationView.getFrame();
                FrameLayout view = frameLayout;
                Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
                Canvas canvas = new Canvas(bitmap);
                view.draw(canvas);
                bitmaps.add(bitmap);
            }

        }
    });

addAnimatorUpdateListener因此,每次更新动画时都会运行上面的代码,因此该函数将所有位图存储在数组中。

for(Bitmap bitmap:bitmaps){
                    OutputStream stream;
                    try {
                        counter++;
                        stream = new FileOutputStream(imageFolder.getAbsolutePath()+"/test-"+counter+".png");
                        bitmap.compress(Bitmap.CompressFormat.PNG,100,stream);
                        Log.i(tag, "onAnimationEnd: " + "converting... " + String.valueOf(counter) + "of " + String.valueOf(animationView.getMaxFrame()));
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                        Log.i(tag, "onAnimationEnd: " + e.getMessage());
                    }

                }

当动画结束时,上面的代码转换位图数组中的所有图像并将它们存储在临时文件夹中。然后我使用FFmpeg-Android从 mp4 中的图像转换视频。

FFmpeg 命令

String[] fcommand = new String[]{"-i", path + "test-%1d.png", "-c:v", "libx264", "-vf", "fps=30", "-pix_fmt", "yuv420p", path + String.valueOf(new Date()) +".mp4"};

通过这个命令,我以 30 FPS 的速度生成视频。

我现在面临的问题

TL;博士

我只想以 30 fps 的速度捕获特定视图的位图,我该如何实现呢?

标签: androidandroid-canvaslottie

解决方案


推荐阅读