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

У меня в основном есть matrix байтов. Каждая строка (означает байт []) представляет изображение. Как мне создать фильм из этого (любой формат – 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? } 

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

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

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

Благодаря!

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

Вот ссылка, которая специально посвящена возможностям изображений в кино в Mencoder.

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

  • Загрузите изображения в объекты BufferedImage с помощью метода .read библиотеки библиотеки ImageIO
  • Используйте метод .drawString Graphics2D для визуализации текста.

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

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

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

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

… где «destinationFormat» – это что-то вроде «m4v», «mpeg2», «h.264», «gif» и т. д.

Вы слышали о JMF (Java Media Framework), из примера вы можете найти этот пример: Создание видеоролика из списка (JPEG) изображений

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

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

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

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

Давайте будем гением компьютера.