Java: Как мне создать фильм из массива изображений? - PullRequest
33 голосов
/ 14 января 2012

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

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"! Никаких внешних программ, никаких внешних команд (но я могу использовать внешние банки).

Спасибо!

Ответы [ 4 ]

8 голосов
/ 14 января 2012

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

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

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

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

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

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

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

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

5 голосов
/ 14 января 2012

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

2 голосов
/ 14 января 2012

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

1 голос
/ 14 января 2012

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

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

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

...