Pregunta Java: ¿Cómo creo una película a partir de una matriz de imágenes?


Básicamente tengo una matriz de bytes. Cada fila (significado byte []) representa una imagen. ¿Cómo creo una película a partir de eso (cualquier formato, avi, mpeg, lo que sea) y lo guardo como un archivo? Cada imagen puede ser una de las siguientes:

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.

Puedo elegir el formato de lo que quiera, siempre que pueda crear la película.

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

No necesito la implementación real, solo déjame saber la idea y las bibliotecas externas que necesito (si es que necesito alguna).

También necesito editar algunas de las imágenes (la secuencia de bytes) antes de crear la película (para agregar algo de texto). ¿Cómo puedo hacer eso?

¡La solución debe ser "solo Java"! Sin programas externos, sin comandos externos (pero puedo usar tarros externos).

¡Gracias!


32
2018-01-13 20:23


origen


Respuestas:


La solución parece ser usar Mencoder (o al menos, eso parece ser una elección semi popular).

Aquí hay un enlace que aborda específicamente imágenes a películas capacidades en Mencoder.

En cuanto a la representación de texto en los marcos antes de codificarlos como parte del video, puede usar las bibliotecas de manipulación de imágenes de Java2D para simplemente dibujar texto sobre las imágenes de antemano. Por ejemplo:

Esa es una forma de hacerlo, y estas preguntas frecuentes debería comenzar en esa dirección con Java2D, renderizado de fuentes, etc., y ofrecer sugerencias para recursos adicionales.

La biblioteca ImageIO también le permite leer / escribir una cantidad de formatos de imagen, lo que le permite transcodificar imágenes de, digamos, .jpg -> BufferedImage -> .png, o de cualquier forma que necesite hacerlo, si desea almacene los archivos de imagen temporalmente durante el proceso de conversión y / o convierta todas las imágenes a un formato único al importarlas para el proyecto de conversión, etc.

Según la cantidad de formatos de salida que desee admitir, probablemente haga algo como

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

... donde "destinationFormat" es algo así como "m4v", "mpeg2", "h.264", "gif", etc.


8
2018-01-13 20:59



¿Has oído hablar de JMF (Java Media Framework), de la muestra puede encontrar este ejemplo: Generación de un archivo de película a partir de una lista de imágenes (JPEG)


5
2018-01-13 21:05



Puedes intentar hacer un gif con esto codificador gif.


2
2018-01-13 21:02



Escribí un lector y escritor MJPEG para reproducir videos dentro de los applets de Java. MJPEG no es el formato de video más avanzado, pero es muy fácil de manipular. El código es parte de mi biblioteca de visión por computadora BoofCV, pero podrías arrancar esta clase para tus propios fines.

  1. Descargar este archivo: CreateMJpeg.java
  2. Mira la función principal. Donde lee en imágenes jpeg pon tus datos de byte [], pero necesitarás convertirlo a jpeg primero.
    • Puede convertirlo en un jpeg usando la biblioteca java estándar
  3. Ejecuta código modificado y disfruta de tu película

Lo siento, no es en un formato más fácil de usar, pero al menos no necesita meterse con JNI como algunas otras soluciones.


1
2018-01-13 21:06