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

У меня в основном есть матрица байтов. Каждая строка (т.е. 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 ответа

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

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

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

Это один из способов сделать это, и этот 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, но вы можете просто извлечь этот класс для своих собственных целей.

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

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

Другие вопросы по тегам