2009-02-11 17 views
18

¿Alguien tiene una manera conocida y confiable de crear un video a partir de una serie de archivos de imágenes? Antes de modificarme para no buscar la respuesta antes de publicar la pregunta, y antes de lanzar un mensaje simple como "use FFMPEG", lea el resto de este mensaje.Forma de trabajo para hacer videos a partir de imágenes en C#

Estoy tratando de crear un video, no importa demasiado el formato, siempre y cuando sea ampliamente compatible, a partir de una serie de imágenes (.jpg, .bmp, etc.). Mi plataforma es Windows Server 2008, de 64 bits. Si puedo hacer el video desde mi programa C#, eso es genial, pero no soy reacio a escribir una serie de archivos de imagen en un directorio y luego a desconectar un programa externo para hacer un video de esas imágenes.

Las únicas restricciones son: debe funcionar en mi sistema Windows Server 2008 y ser secuenciable. Es decir, no hay programas de GUI que requieren la intervención del operador.

Encontré una serie de preguntas similares en StackOverflow, y he intentado varias de las soluciones, todas con diversos grados de frustración y ninguna con éxito.

FFMPEG parece un gran programa. Tal vez lo sea, en Linux. Las dos compilaciones de Windows que descargué están rotas. Dada esta línea de comando:

ffmpeg -r 1 -f image2 -i jpeg\*.jpg video.avi 

Una de las construcciones lee las imágenes y luego se cuelga debido a la prevención de la ejecución de datos. El otro lee el primer archivo y luego escupe un mensaje de error que dice "no se puede encontrar el códec adecuado para el archivo jpeg/image2.jpg". Útil, eso. En cualquier caso, FFMPEG parece no arrancar en Windows.

Una respuesta a una publicación anterior recomendada Splicer. Parece un código bastante bueno. Recopilé las muestras e intenté ejecutarlas, pero recibí un mensaje de error críptico sobre un archivo no encontrado. Parece que una clase COM no está registrada. Supongo que necesito instalar algo (DirectShow, tal vez, aunque pensé que ya estaba instalado). Dependiendo de lo que se requiera, podría tener dificultades para justificar su instalación en un servidor. ("¿Qué? ¿Por qué lo necesita en un servidor?")

Otra respuesta sugiere la biblioteca AviFile de Code Project. Eso parece bastante simple: una envoltura alrededor del subsistema Windows AviFile. Excepto que los archivos AVI que crea el paquete parecen tener todos los marcos, pero solo el primer cuadro se muestra cuando juego AVI en Windows Media Player. Bueno, eso y si intentas crear un video comprimido, el programa arroja una excepción.

Entonces, me pregunto si hay una buena y confiable manera de hacer lo que quiero: en un sistema Windows, cree un AVI u otro formato de archivo de video común a partir de una serie de imágenes, ya sea a través de .NET API o usando un programa externo. ¿Alguna ayuda?

+0

Pruebe su comando ffmpeg sin -f image2, o con -f jpeg, es decir 'ffmpeg -r 1 -i jpeg/* .jpg video.avi 'o' ffmpeg -r 1 -f jpeg -i jpeg/*. jpg video.avi ' – configurator

+0

@configurator: sin -f imagen2, obtengo los mismos resultados. Con -f jpeg, obtengo "Formato de entrada o salida desconocido: jpeg". –

Respuesta

10

Después de trabajar un rato y echar un vistazo a x264 y VideoLan, volví a Splicer. Resulta que el mensaje de error críptico se debió a un error en mi código.

Parece que Splicer hará lo que yo quiera: crear videos programáticamente a partir de una serie de imágenes.

Gracias a todos los que respondieron.

1

El manejo de video en Windows (codificación y reproducción) es un verdadero atolladero. Y .NET no lo va a ayudar en absoluto, siempre va a ser una API nativa de Invocación/Interoperación COM o utilizando un contenedor .NET que otra persona ha creado para hacer lo mismo.

De todos modos, no puedo decir que lo he usado, pero una buena apuesta parece ser la x264 library that is part of the videolan project. Eso le brinda una biblioteca de C independiente que puede invocar y no tiene que preocuparse por la instalación y la basura de DirectShow en su servidor. Generará video en formato H.264 que se puede reproducir en Flash, tal como lo entiendo.

6

Puede usar VideoLan y yo lo recomendaría.

que he tenido experiencia directa en una aplicación de C# con VideoLAN hacer estas dos cosas:

  1. incorporación de un visor de VLC en mi aplicación de C# (hay 3-4 C# "envoltorios" para el veiwer VLC) .
  2. Usando vlc.exe en un proceso separado enviándole argumentos de línea de comandos.

El hecho de que VideoLan tenga una interfaz de línea de comandos es una gran cosa. Y VLC admite una opción de línea de comandos que deshabilita cualquier elemento visual; por lo que la GUI de VLC no aparece y tampoco una ventana de línea de comandos. Por lo tanto, en una aplicación C# puede agotar el trabajo relacionado con el video al cliente VLC. C# tiene la clase Process que puede administrar tus instancias vlc.exe por ti. Termina siendo una solución bastante ordenada.

0

He usado mplayer 's MENCODER para crear AVI (con códecs msmpeg4/mp3, legible por defecto con Windows Media Player) a partir de archivos de TGA en Linux así:

mencoder mf://*.tga -mf fps=25:type=tga \ 
    -audiofile /tmp/test.mp3 -oac copy \ 
    -of lavf -ovc lavc \   
    -lavcopts vcodec=msmpeg4v2:mbd=2:mv0:trell:cbp:last_pred=3:vbitrate=3000 \ 
    -o /tmp/test.avi 

Sé Mplayer se tiene una versión de Windows.

0

En lugar de pasar por todas las molestias, puede copiar todas las imágenes que desee incluir en su video al portapapeles y hacer que se importen a Windows Live Movie Maker (¡dinámicamente, por supuesto!) Y tenerlo compila para ti!

Todo esto PUEDE hacerse a través del código, pero de esta manera, no tiene que crearlo usted mismo. Como usted ha dicho que la plataforma era de Windows, y todas las ventanas comps tiene instalado Windows Live Movie Maker, por lo que no debería ser un problema para cualquier persona que utilice su aplicación a menos

a) Se desinstalar Windows Live Movie Maker

b) Están usando una computadora que funciona con una versión de Windows de más de 8 o 9 años ...

+1

@Rugs: no todas las computadoras con Windows tienen instalado Windows Live Movie Maker. Ciertamente no está instalado por defecto en Windows Server 2008, y muchos desarrolladores lo usan para sus máquinas de desarrollo. En segundo lugar, su solución podría funcionar si tuviera alguna forma automática de agregar miles de imágenes al portapapeles e importarlas de una en una a Movie Maker. Pero principalmente rechazaría esta solución porque tengo un programa que crea las imágenes dinámicamente y su importación una a una en Movie Maker llevaría un tiempo increíblemente largo. –

Cuestiones relacionadas