codigo - Java: ¿Cómo creo una película a partir de una matriz de imágenes?
border title java (4)
¿Has oído hablar de JMF (Java Media Framework)? De la muestra, puedes encontrar este ejemplo: Generar un archivo de película desde una lista de imágenes (JPEG)
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!
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ía BoofCV esta clase para sus propios fines.
- Descargar este archivo: CreateMJpeg.java
- 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
- 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.
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 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:
- Cargue las imágenes en objetos BufferedImage través del método .read de la biblioteca de ImageIO
- Use el método .drawString de Graphics2D para representar el texto
Esa es una forma de hacerlo, y estas preguntas frecuentes deben ayudarlo 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.
Puedes intentar hacer un gif con este codificador gif .