Подтвердить что ты не робот

Java: Как создать фильм из массива изображений?

У меня в основном есть матрица байтов. Каждая строка (означает байт []) представляет изображение. Как мне создать фильм из этого (любой формат - avi, mpeg, whatever) и сохранить его как файл? Каждое изображение может быть одним из следующих:

int JPEG    Encoded formats.
int NV16    YCbCr format, used for video.
int NV21    YCrCb format used for images, which uses the NV21 encoding format.
int RGB_565 RGB format used for pictures encoded as RGB_565.
int YUY2    YCbCr format used for images, which uses YUYV (YUY2) encoding format.
int YV12    Android YUV format: This format is exposed to software decoders and applications.

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

public void createMovie(byte[][] images) {
  // and ideas on what to write here?
}

Мне не нужна реальная реализация, просто дайте мне знать идею и какие внешние библиотеки мне нужны (если мне это нужно).

Мне также нужно отредактировать некоторые изображения (поток байтов), прежде чем я создам фильм (чтобы добавить текст). Как я могу это сделать?

Решение должно быть "только Java"! Нет внешних программ, нет внешних команд (но я могу использовать внешние банки).

Спасибо!

4b9b3361

Ответ 1

Решение похоже на использование Mencoder (или, по крайней мере, это похоже на полупопулярный выбор).

Здесь ссылка, которая специально описывает возможности images-to-movies в Mencoder.

Что касается рендеринга текста в кадрах перед их кодированием как части видео, вы можете использовать библиотеки обработки изображений Java2D, чтобы просто нарисовать текст поверх изображений заранее. Например:

Это один из способов сделать это, и этот FAQ должен помочь вам начать работу в этом направлении с помощью Java2D, рендеринга шрифтов и т.д. и предложить указатели на дополнительные ресурсы.

Библиотека ImageIO также позволяет вам читать и записывать несколько форматов изображений, эффективно позволяя вам перекодировать изображения, скажем,.jpg → BufferedImage → .png, или любой способ, который вам нужно сделать, если вы хотите временно хранить файлы изображений во время процесса преобразования и/или преобразовывать все изображения в один формат при импорте их для проекта конверсии и т.д.

В зависимости от того, сколько форматов вывода вы хотите поддерживать, вы, вероятно, сделаете что-то вроде

public void createMovie(BufferedImage[] frames, String destinationFormat)

... где "destinationFormat" - это что-то вроде "m4v", "mpeg2", "h.264", "gif" и т.д.

Ответ 3

Вы можете попробовать создать gif с этим gif encoder.

Ответ 4

Я написал читателя и писателя MJPEG для воспроизведения видеороликов внутри апплетов Java. MJPEG - не самый продвинутый видеоформат, но его очень легко манипулировать. Код является частью моей компьютерной системы просмотра изображений BoofCV, но вы можете просто вырвать этот класс для своих целей.

  • Скачать этот файл: CreateMJpeg.java
  • Посмотрите на основную функцию. Где он читает в jpeg-изображениях, поместите ваши данные byte [], но сначала вам нужно будет преобразовать их в jpeg.
    • Вы можете преобразовать его в jpeg, используя стандартную java-библиотеку
  • Запустите измененный код и наслаждайтесь фильмом

Извините, что он не в более удобном для пользователя формате, но по крайней мере вам не нужно возиться с JNI, как некоторые другие решения.