2012-01-13 11 views
31

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 uno de los siguientes:Java: ¿Cómo creo una película a partir de una matriz de imágenes?

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 a lo que quiera, siempre y cuando llego a crear la película.

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

no necesito la implementación real, házmelo saber la idea y lo que las bibliotecas externas que necesito (si necesito).

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!

+3

+1, para una pregunta increíble. Ojalá pudiera responder a esto, pero mi copa está totalmente vacía en esto. Espero que alguien lo haga Saludos –

Respuesta

8

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

Aquí hay un enlace que aborda específicamente las capacidades de images-to-movies en Mencoder.

En cuanto a la representación de texto en los marcos antes de codificarlos como parte del vídeo, puede utilizar las bibliotecas de manipulación de imágenes de Java2D simplemente dibujar texto en la parte superior de las imágenes de antemano Por ejemplo:

Esa es una manera de hacerlo, y this FAQ debe empezar en t dirección del sombrero con Java2D, representación de fuentes, etc., y consejos de oferta para otros recursos.

La biblioteca de 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 almacenar los archivos de imagen temporalmente durante el proceso de conversión, y/o convertir todas las imágenes a un formato único al importarlas para el proyecto de conversión, etc.

Dependiendo de la cantidad de formatos de salida que desee admitir, es probable que hacer algo como

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

... donde "destinationFormat" es algo así como "M4V", "mPEG2", "h .264 "," gif ", etc.

+0

¡Gracias por la respuesta! ¡Tu solución suena genial! Pero Mencoder parece ser un programa externo. ¿Mencioné que necesito esto solo en Java? :) No lo hice .... – user361676

+0

Oh, no me di cuenta. Si no desea utilizar bibliotecas/programas externos a través de llamadas al sistema, me temo que no tengo ninguna solución alternativa. – jefflunt

+0

Al menos mi pregunta sobre cómo escribir texto sobre las imágenes fue respondida. ¡Gracias por eso! – user361676

2

Puede intentar hacer un gif con este gif encoder.

+0

Gracias, pero necesito un avi o mpeg, comprimido o no comprimido. – user361676

4

ha escuchado acerca JMF (Java Media Framework), a partir de la muestra se puede encontrar este ejemplo: Generating a Movie File from a List of (JPEG) Images

+0

Esta sería una solución ideal, pero no pude encontrar ningún tutorial que describa cómo escribir un archivo de video usando JMF. Ese hilo no tiene respuestas que pueda leer ... – user361676

+0

Lo siento por el enlace anterior, no vi que no estuviera resuelto. Esta muestra es de la documentación de JMF, debería ser mejor. – webpat

1

me escribió un lector y escritor MJPEG para la reproducción de vídeos en el interior 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ía arrancar esta clase para sus propios fines.

  1. Descargar este archivo: CreateMJpeg.java
  2. mirada a 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 archivo JPEG usando la biblioteca estándar de Java
  3. código modificado Ejecutar y disfrutar de su película

En este momento no está en un formato más fácil de usar, pero al menos se no necesita meterse con JNI como algunas otras soluciones.

+0

Lo probé, pero mi reproductor no pudo abrir el archivo de salida, incluso si lo renombré como "avi". – user361676

+0

que jugador? En mi sistema Ubuntu, funciona bien en mplayer. –

+0

Probé el reproductor de video MX y Mobo, ninguno podía jugarlo. – user361676

Cuestiones relacionadas