2009-07-18 24 views
7

Bueno, situación simple. Creé alrededor de 5000 cuadros como archivos PNG que quiero mostrar como una animación dentro de una aplicación .NET. Cada imagen tiene un tamaño de 1920x1080 y el archivo PNG utiliza canales alfa para la transparencia (parcial). Y eso complicará un poco las cosas, porque preferiría mantenerlo transparente. (Pero si eso es imposible, simplemente agregaré una imagen de fondo a cada PNG.)Cómo crear una película a partir de 5000 archivos PNG?

Debido a la gran cantidad de imágenes, necesitaría mucha memoria. Bueno, un disco duro de 1 TB y un sistema Intel Xeon de cuatro núcleos y 12 GB con Vista de 64 bits soluciona esos requisitos de memoria. Pero a menos que se cree una herramienta para admitir 64 bits, probablemente se estrangulará después de cargar tal vez 800 de las 5000 imágenes. Entonces necesito una herramienta que pueda hacer esto.

El formato de la película no es tan importante. Tampoco lo es la compresión, siempre que la calidad de la imagen permanezca alta. (¡Y hay una razón por la que he usado una resolución tan enorme!) Sin embargo, sería preferible la compresión sin pérdida. Mi sistema es lo suficientemente rápido como para volver a reproducir la película luego, así que no estoy preocupado por su velocidad. Sin embargo, la calidad de imagen es el factor más importante aquí.

Hasta ahora, he encontrado dos opciones: 1) Encontré alguna herramienta gratuita que puede manejar esta cantidad de datos. (Gratis o muy barato) 2) Escribo una herramienta así ...

La opción 1 está un poco fuera de lugar aquí. Además, como ingeniero de software, ¡mis manos solo se contraen para escribirlo yo mismo! En C# preferiblemente no hay bibliotecas de terceros. Entonces mi pregunta: - ¿Por dónde empezar a escribir esto yo mismo?


(En caso de que te lo preguntes, esta película es una animación en la que una mujer joven camina por las calles de una ciudad, pasando varias señales que mencionan características de un producto. Al final de la película, camina hacia una signo más grande que muestra el nombre del producto en sí. Y es una escena larga y continua, sin interrupciones. ¡Y realmente divertido de crear! Y aproximadamente 10 GB de imágenes ...)

Respuesta

9

si está en Windows, también puede buscar en virtualdub. http://www.virtualdub.org/

puede hacer AVI de las BMP, PNG, etc.

+1

Bueno, es compatible con 64 bits. :-) Descargando? ¡Comprobar! ¿Instalar? ¡Comprobar! ¿Corriendo? ¡Comprobar! ¿Convertion tuvo éxito? ¡SÍ! Y con el código fuente disponible, entonces la solución perfecta. :-) –

+0

En segundo lugar esto; esta herramienta es excelente para hacer cualquier conjunto de imágenes en un video. Instale ffdshow y luego tendrá acceso al codificador H.264 y a otros que funcionarán con buena calidad para una tasa de bits alta. –

+0

¡No pude usar este programa para leer una carpeta de 5000 imágenes y crear un video! – arod

9

FFMPEG es capaz de crear una película archivo de una serie de archivos de imagen, este enlace a su manual muestra un ejemplo:

http://ffmpeg.org/ffmpeg-doc.html#SEC5

en cuanto a la creación del archivo de película con programaticcaly no hay bibliotecas de terceros ... eso va a ser un poco más difícil. Muchos formatos de película son tremendamente complicados y crear uno sin una biblioteca existente sería muy doloroso (a menos que malinterprete tu pregunta y no estés preguntando sobre la creación del codificador real)

Si no interpreté mal tu pregunta, hacer una implementación simple de un códec de película basado en YUV podría ser factible. HuffYUV es uno de los que estoy consciente que podría no ser demasiado desafiante.

+0

No soy muy aficionado a MPEG ya que es un formato de compresión con pérdida. Me gustaría tener primero un formato de película sin pérdida que luego podría usar para convertir a cualquier otro formato que quisiera. Debería haber un formato sin pérdida en alguna parte, ¿verdad? No importa si la película final tiene un tamaño de 40 GB o lo que sea. Solo necesito tener todas las 5000 imágenes en un formato de película sin pérdida. Aún así, FFmpeg parece prometedor. Sin embargo, no estoy seguro si puede manejar tanta información. (Ni si se puede compilar en una aplicación de 64 bits.) –

+0

FFMPEG no debería tener ningún problema con el manejo de esa cantidad de datos, si sigue esa ruta. Por ejemplo, lo he usado para codificar Elephant's Dream (http://www.elephantsdream.org/) antes, que está disponible en aproximadamente 12 GB de pngs sin pérdida. – Falaina

+2

Oh, acabo de notar que quieres un códec de película preferiblemente sin pérdidas. FFMPEG admite el modo sin pérdida x264 (un codificador h.264) así como algunos formatos YUV (como HuffYUV) que también deberían ser sin pérdida – Falaina

6

dos cosas:

  • Eres no va a escribir un codificador de vídeo adecuado por sí mismo. Ni por asomo. Por lo tanto, sus opciones son reutilizar un codificador existente o no usar ningún codificador.
  • Ningún formato de video se ocupará de la transparencia. O le das a todas las imágenes un fondo, o no podrás usar un formato de video existente.

Hay un par de soluciones que vienen a la mente:

Usted no se preocupan por el tamaño, sino que lo hacen se preocupan por la calidad. Lo primero que me preguntaría es: ¿realmente realmente no le importa el tamaño? La mayoría de los formatos de video (especialmente H.264) le brindarán una excelente calidad a un tamaño de archivo sustancialmente más bajo (piense 10 veces). Apenas podrás notar la diferencia. Sí, su contenido es HD, pero el contenido HD en TV o Blu-ray también está comprimido (usando H.264 o VC-1) y es lo suficientemente bueno para todos los demás. Así que seriamente consideraría esto como una opción, ya que hace el resto mucho más fácil.

Si lo desea, siempre puede recurrir a un formato de video sin pérdida, como HuffYUV. Esto al menos le dará compresión, mientras reduce el tamaño de sus datos de video a la mitad (o más).

Como dije, al usar un formato de video codificado, pierde la transparencia. Si desea mantener la transparencia y todavía no le importa el tamaño del archivo, ¿por qué no mantener los PNG y mostrarlos como una presentación de diapositivas muy rápida en su aplicación? Si su único problema con esto son los requisitos de memoria de cargar todos los PNG en la memoria a la vez ... no lo haga. Lea un par de cuadros por delante (una cantidad fija o tan lejos como lo permita la memoria), y una vez que haya mostrado un marco, retírelo de la memoria y lea un nuevo cuadro. De esta forma, puede mantener una calidad perfecta y requisitos de memoria constantes. El único problema es que su disco y procesador necesitarán poder seguir el ritmo de lectura de 30 PNG por segundo (o cualquiera que sea su velocidad de cuadros).

Además, si 5000 archivos de imagen separados se vuelven demasiado difíciles de manejar, puede envolverlos en un formato de archivo personalizado. Un archivo ZIP viene a la mente como un formato portátil simple, o puede hacer el suyo propio.

+0

Bueno, quiero un archivo maestro que pueda convertir a otros formatos de película. Por lo tanto, este archivo maestro debe ser de la mejor calidad posible. Entonces HuffYUV suena bien. Pero necesita permanecer en 1920x1080 y HuffYUV no parece apoyar esto. Sobre la transparencia, ya esperaba que esto no fuera posible, así que no hay problema allí. El tamaño no será un problema ya que el archivo maestro está almacenado en mi sistema, que tiene 1 TB de espacio libre en el disco. –

2

Puede hacer lo que quiera con mencoder:

Aquí hay un enlace de esa documentación: Encoding from multiple input image files (JPEG, PNG, TGA, etc.)

Acerca de la transparencia: No creo que haya un códec de video que admita transparencias, por lo que no tiene suerte aquí ...

+0

Estoy muy contento con VirtualHub. :-) MEncoder también se ve bien, pero la necesidad de CygWin no me hace feliz. Y, por último, MEncoder NO es compatible con Windows de 64 bits. VirtualHub sí, por lo que VirtualHub hace un mejor uso de mis recursos. Aún así, parece una buena opción. –

+0

Mencoder se puede compilar para ventanas nativas con mingw, no se necesita cygwin. Puede encontrar los binarios de ventanas de mplayer/mencoder aquí http://oss.netfarm.it/mplayer-win32.php. – Serafeim

1

O bien, si está en Windows - ju usar St Movie Maker.

Requiere bastante espacio de RAM y potencia de procesamiento, pero es más intuitivo que VirtualDub y le permite agregar algunos efectos y títulos simples.

+0

Su respuesta es demasiado tarde ... –

+0

Sí, sé que no ayudará en su caso ;-). Puede ser útil en el futre aunque :-). – Nux

Cuestiones relacionadas