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"! Нет внешних программ, нет внешних команд (но я могу использовать внешние банки).
Спасибо!
Ответы
Ответ 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" и т.д.
Ответ 2
Слышали ли вы о JMF (Java Media Framework), из примера вы можете найти этот пример: Создание видеофайла из списка изображений (JPEG)
Ответ 3
Вы можете попробовать создать gif с этим gif encoder.
Ответ 4
Я написал читателя и писателя MJPEG для воспроизведения видеороликов внутри апплетов Java. MJPEG - не самый продвинутый видеоформат, но его очень легко манипулировать. Код является частью моей компьютерной системы просмотра изображений BoofCV, но вы можете просто вырвать этот класс для своих целей.
- Скачать этот файл: CreateMJpeg.java
- Посмотрите на основную функцию. Где он читает в jpeg-изображениях, поместите ваши данные byte [], но сначала вам нужно будет преобразовать их в jpeg.
- Вы можете преобразовать его в jpeg, используя стандартную java-библиотеку
- Запустите измененный код и наслаждайтесь фильмом
Извините, что он не в более удобном для пользователя формате, но по крайней мере вам не нужно возиться с JNI, как некоторые другие решения.