Я пытаюсь преобразовать файл 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), пожалуйста, сообщите мне.