Forma de trabajo para hacer videos de imágenes en C #

¿Alguien tiene una forma 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 rest de este mensaje.

Intento crear un video, no importa demasiado qué 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 progtwig C #, eso es genial, pero no soy reacio a escribir una serie de archivos de imagen en un directorio y luego a desconectar un progtwig externo para hacer un video de esas imágenes.

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

Encontré varias 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 progtwig. Tal vez lo sea, en Linux. Las dos comstackciones 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 comstackciones lee las imágenes y luego se bloquea 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 recomendaba 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 necesitas en un servidor?”)

Otra respuesta sugirió 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 progtwig arroja una excepción.

Por lo tanto, me pregunto si existe una forma buena y confiable 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 una API .NET o usando un progtwig externo. ¿Alguna ayuda?

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.

Puedes usar VideoLan y yo lo recomendaría.

He tenido experiencia directa en una aplicación C # con VideoLan haciendo estas dos cosas:

  1. Incrustar un visor VLC en mi aplicación C # (hay 3-4 C # “envoltorios” para el VLC veiwer).
  2. Usar vlc.exe en un proceso separado enviándoles 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.

El manejo del video en Windows (encoding 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 biblioteca x264 que es parte del proyecto de video . 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.

He usado el mencoder de mplayer para crear AVI (con codecs msmpeg4 / mp3, legible de forma predeterminada con Windows Media Player) desde archivos TGA en Linux como este:

 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é que mplayer tiene una versión de Windows.

En lugar de atravesar todas las molestias, puede incluir en el portapapeles todas las imágenes que desea que se incluyan en su video y hacer que se importen a Windows Live Movie Maker (¡dinámicamente, por supuesto!) Y comstackrlo para usted.

Todo esto PUEDE hacerse a través del código, pero de esta manera, no tiene que crearlo usted mismo. Como dijiste que la plataforma era Windows, y TODAS las comps de Windows tienen Windows Live Movie Maker instalado, entonces no debería ser un problema para cualquiera que use tu aplicación a menos que

a) Desinstalaron Windows Live Movie Maker

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