Устранение неполадок класса AnimatedGifEncoder для Android, отображаются только первый и последний кадры - PullRequest
0 голосов
/ 10 февраля 2019

Я пытаюсь преобразовать файл mp4 в gif через класс AnimatedGifEncoder.

ByteArrayOutputStream bos = new ByteArrayOutputStream();

    GifEncoder animatedGifEncoder = new GifEncoder();
    animatedGifEncoder.setFrameRate(24);

    Bitmap bmFrame;
    animatedGifEncoder.start(bos);
    for (int i = 0; i < numFrames; i += 1) {
        long frameTime =  i*1000/frameRate;
        Log.i("LoopNumber", "frametime " + frameTime);
        bmFrame = mediaMetadataRetriever.getFrameAtTime(frameTime);
        frames.add(bmFrame);
        boolean isSuccessful = animatedGifEncoder.addFrame(bmFrame);
        Log.i("LoopNumber", i+"/"+numFrames);
        Log.i("LoopNumber", "Was loop successful " + isSuccessful);
        Log.i("LoopNumber", "Byte array length " + bos.toByteArray().length);
        Log.i("LoopNumber", "Byte array string " + bos.toByteArray().toString());
    }

Растровое изображение, соответствующее каждому кадру в созданном.Я довольно уверен, что знаю это, потому что в одной версии я создал List<Bitmap>, зарегистрировал длину и сравнил с количеством кадров, рассчитанным по частоте кадров и продолжительности.Журналы также показывают, что каждая итерация AnimatedGifEncoder.addFrame(Bitmap bitmap) прошла успешно, что подтверждается возвратом true.Когда я пытаюсь воспроизвести только что созданный GIF, отображается только 1-й кадр.Я могу получить второй кадр, чтобы показать, если я добавлю следующий код после цикла:

bmFrame = mediaMetadataRetriever.getFrameAtTime(maxDur);
animatedGifEncoder.addFrame(bmFrame);

Это приводит к отображению 1-го и последнего кадра (большую часть времени виден 1-й кадр).Я полностью в растерянности, когда дело доходит до устранения этой ошибки.Любая помощь будет принята с благодарностью.Если есть альтернативные способы перехода с mp4 на gif в java, cpp или python (эти языки можно использовать в устройствах Android), пожалуйста, сообщите мне.

...