2009-03-13 22 views
27

Tengo lo que parece que debería ser un problema realmente simple, pero está resultando mucho más difícil de lo que esperaba. Aquí está el problema:Convertir secuencia de imágenes en video con transparencia

Tengo una secuencia de imagen bastante grande que consiste en marcos numerados (salida de Maya, por lo que vale). Las imágenes están actualmente en formato Targa (.tga), pero podría convertirlas a PNG u otro formato arbitrario, si eso fuera importante. Lo importante es que tienen un canal alfa.

Lo que quiero hacer es convertirlas programáticamente en un video clip. El formato en realidad no importa, pero debe ser sin pérdida y tener un canal alfa. El video sin comprimir en un contenedor de Quicktime probablemente sea ideal.

Mi pensamiento inicial fue ffmpeg, pero después de perder la mayor parte del día parece que no tiene soporte para canales alfa. O me falta algo, o el libavcodec subyacente simplemente no lo hace.

Entonces, ¿cuál es el camino correcto aquí? Una herramienta de línea de comandos como ffmpeg sería agradable, pero cualquier solución que se ejecute en Windows y se pueda invocar desde un script estaría bien.

Nota: Tener un canal alfa en el video no es realmente poco común, y es realmente útil si desea compilarlo sobre otro clip de video o una imagen fija. Hasta donde sé, el video sin comprimir, el códec Quicktime Animation y el códec Sorenson Video 3 son compatibles con la transparencia, y también he escuchado que H.264 lo hace. De lo único que realmente estamos hablando es de la profundidad de color de 32 bits, y eso es bastante ampliamente compatible; ambos archivos Quicktime .mov y Windows .avi pueden manejarlo, y probablemente también mucho más.

Quicktime Pro es más que feliz de convertir una secuencia de imágenes en un archivo .mov de 32 bits. Acceda a la exportación, cambie la profundidad de color a "Millones de colores +", seleccione el códec de animación, suba la calidad hasta 100, y allí está: video comprimido sin pérdida de tiempo, con un canal alfa, y se reproducirá en casi cualquier lugar desde el códec ha sido parte de Quicktime desde la versión 1.0. El problema es que Quicktime Pro no tiene ningún tipo de interfaz de línea de comandos (al menos en Windows). ffmpeg admite la codificación utilizando el códec Quicktime Animation (que llama qtrle), pero solo admite una profundidad de bits de 24 bits.

El problema no es encontrar un formato de video que admita un canal alfa. La animación Quicktime sería ideal, pero incluso el video sin comprimir debería funcionar. El problema es encontrar una herramienta que lo soporte.

+1

¿Qué quieres que suceda con el canal alfa? ¿El video debe ser transparente en algunos lugares? (No conozco ningún formato que lo soporte) ¿o debería mostrarse el cuadro anterior? – Greg

+0

Estoy de acuerdo con RoBerg, no he encontrado formatos de video que hagan esto. Puede que tengas que hacer tu propia. –

+0

Correcto, debería ser transparente, por lo que si lo superponía en una imagen de fondo, podría ver el fondo. He agregado más información sobre eso a la pregunta. –

Respuesta

-1

Cody,

Usted puede escribir su propia utilidad de línea de comandos con el Quicktime SDK for Windows, recomendaría quedarse con el nivel más alto apis Quicktime COM y sólo ahondar en el C-API si realmente tiene que hacerlo.

-Nick

25

Sí ffmpeg sin duda es compatible con canal alfa en un archivo de vídeo. No todos los códecs en ffmpeg parecen ser compatibles con alpha aunque sí. Motion PNG en un archivo .MOV es una buena combinación para alfa.

para codificar imágenes/importación con alfa a un vídeo con alfa intento: ffmpeg -i %d.png -vcodec png z.mov

Quicktime que jugarán.

para decodificar/exportar un vídeo con imágenes de la alfa alfa intento: ffmpeg -i z.mov -f image2 export2\%d.png

Nota que las exportó a un directorio llamado 'Export2'. Asegúrese de dejar las partes% d allí.Estos comandos funcionarán como están en un sistema de Windows. Los usuarios de Linux/Mac pueden necesitar agregar comillas e intercambiar algunos \ por/como de costumbre.

12

Sé que este tema es un poco viejo, pero estoy publicando todos modos.

FFMPEG con Quicktime Animation (RLE) o FFVHUFF/HUFFYUV.

  • ffmpeg -i yoursequence% d.png -vcodec qtrle movie_with_alpha.mov
  • ffmpeg -i yoursequence% d.png -vcodec ffvhuff movie_with_alpha.avi
  • ffmpeg -i yoursequence% d.png -vcodec huffyuv movie_with_alpha.avi

Se conservarán los archivos de video con transparencia (canal alfa).

También he escuchado la variación On2-VP6 (No es el WebM-VP8 todavía) puede manejar alfa, pero no tengo su códec a la mano.

Esto también funciona. - ffmpeg -i yoursequence% d.png -vcodec png movie_with_alpha.mov

+0

Lástima que RLE y YUV produzcan archivos enormes. VP6 para FLV produce archivos mucho más pequeños. Lástima que no hay un codificador vp6a gratuito. De hecho, el único codificador VP6 que pude encontrar está en Adobe Media Encoder. – rustyx

+0

RLE y YUV se utilizan casi exclusivamente como archivos editables intermedios o archivos fuente de la emisora. Supongo que se puede trabajar con estos para editar, y luego convertir a formato más pequeño disponible (por ejemplo, FLV) cuando el trabajo está finalizado y listo para publicar. – satoc

3

para los desarrolladores web que llegan a esta pregunta y golpeando la cabeza contra la pared por la frustración ... Es posible crear un transparent WebM video, pero en el momento que te pueden necesita compilar ffmpeg y las bibliotecas requeridas desde el origen.

Quería mostrar un video renderizado de Blender en un sitio web pero conservar la transparencia. El primer paso fue renderizar la salida de Blender como archivos PNG individuales. Después de eso, pasé bastante tiempo tratando de forzar ffmpeg para convertir esos archivos PNG en un solo video. El comando básico es simple:

ffmpeg -i input%04d.png output.webm 

Este comando carga todos los archivos PNG con los nombres de archivo a través input0000.pnginput9999.png y los convierte en un video. La transparencia se perdió rápidamente. Peinado a través de la salida me di cuenta ffmpeg seleccionaba amablemente un formato no transparente:

Incompatible pixel format 'yuva420p' for codec 'flv', auto-selecting format 'yuv420p'

En este momento me daba cuenta de que podría tener que volver a compilar ffmpeg desde cero. Luché con algunas otras herramientas, pero al final terminé con ffmpeg. Después de compilar libvbx y ffmpeg de la última fuente, las cosas funcionaron con encanto.

Cuestiones relacionadas