Как я могу записать на экран определенный вид видео? - PullRequest
0 голосов
/ 29 марта 2019

Я использую Lottie Animation Library , и я хочу записать это представление анимации как видео, но у этой библиотеки нет поддержки экспорта видео, поэтому я пытаюсь найти собственное решение и,

Это то, что я пробовал до сих пор.

    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 кадров в секунду.

Проблемы, с которыми я сталкиваюсь сейчас

  • Видео не настолько плавное даже при скорости 30 кадров в секунду (420p).
  • (Bitmap.createBitmap(view.getDrawingCache()); 30 раз в секунду?возможно ли это?

TL; DR

Я просто хочу захватить растровые изображения определенного вида со скоростью 30 кадров в секунду, как мне этого добиться?

...