Mostrando entradas con la etiqueta python. Mostrar todas las entradas
Mostrando entradas con la etiqueta python. Mostrar todas las entradas

jueves, 9 de diciembre de 2010

Creando informes en python

Aprovechando este puente, y un problema que he tenido con el kindle y algunos cómics en cbz y cbr me he animado a avanzar por un camino que tenía algo apartado: la generación de informes automatizada.

El asunto puede parecer trillado, bueno, está trillado, pero hete aquí que no es lo mismo lanzar tu generador de informes desde tu entorno J2EE o desde un entorno controlado que tener que generar informes utilizando script embebido en programas de animación 3D.

He intentado utilizar todo tipo de combinaciones, desde diálogos modales a mensajería instantánea, emails o salida de texto plano vía consola para informar al usuario y de un modo o de otro siempre, -. siempre .- hay problemas. He aprovechado estos días para trabajar en la generación automática de documentos, en particular en generar PDF a través de python.

Existen dos proyectos fundamentales en esto: PIL como biblioteca de tratamiento de imágenes desde python y reportlab una utilidad de generación de documentos, al menos de generación de PDF.

Las posibilidades son grandes, de momento utilizo ambas bibliotecas para modificar los ficheros de cómics (sí, soy un gran aficionado, nadie es perfecto) a PDFs que aprovechen al máximo el kindle sin forzar la máquina. Sin embargo y mientras pueda lograrlo, se acabaron para mí los informes en texto chusco.

(Hasta donde yo he visto y conozco) El desarrollo in-home en las empresas de animación es, irónicamente, espartano, soviético, funcional, ... vamos, es feo. Algunos colegas opinan que hacer las cosas "bonitas" es un extra, una suerte de lujo, una veleidad. Hacerlo feo y soviético es más barato y rápido en desarrollo, lamentablemente la experiencia nos demuestra que las utilidades que se dejan en ese estado suelen tener una pésima acogida entre los usuarios. Es decir, optar por un diseño chusco es abaratar a corto plazo, porque luego hay que rehacer el envoltorio.

Yo he tardado un tiempo en interiorizarlo por completo: no estamos en los tiempos de Henry Ford. Ya no vale el para todos café. Las aplicaciones deben funcionar, eso por supuesto, pero además debe ser agradable usarlas y, la comunicación con el usuario o los informes, no son una excepción.




He preparado algo de código de ejemplo que puede obtenerse de aquí: comic archive converter. A la hora de descargar este contenido debe tenerse en cuenta que es código de programador-para-programador, es decir, es incómodo de usar y no se trata ni mucho menos de una utilidad al completo, es una prueba de concepto.

sábado, 12 de diciembre de 2009

Blender sequencer automation

Durante esta semana he estado buscando algunas alternativas a la creación de vídeos a partir de grandes secuencias dispersas de imágenes.

Mis condiciones eran las siguientes:

  1. Las imágenes pueden existir o no. Si no están ahí el vídeo debe presentar negro y el audio debe continuar tal cual.
  2. Los archivos pueden estar dañados o incompletos.
  3. La resolución de los ficheros es conocida a priori pero no es obligatoria
  4. El vídeo resultante debe ser un quicktime.
  5. Debe generarse en un entorno linux con coste de software cero.
Mi primera opción fue pensar en Shake y echarlo mucho de menos, optar por él iría en contra de la condición [5]

Tenía la opción de Toxik, incluído en nuestras licencias de maya. Sin embargo no terminaba de estar cómodo con esto ya que optar por esto habría supuesto que cada vez que alguien hiciese un video consumiría a su vez una licencia.

Finalmente y como es habitual en mí, opté por blender.

Y aquí es donde las cosas se ponen feas. Resulta que la documentación de la API en las áreas del secuenciador no termina de estar terminada. Es más, está prácticamente vacía.

En el foro de desarrollo encontré algunas pistas sobre cómo crear strips de vídeo. Especialmente esta corta respuesta de cómo crear videos en el sequencer. Sin embargo en ese post no se comenta nada acerca de cómo hacer una pista de efecto. Un cross fade, o un fade o yo que sé.



Así que me encontré con que tenía todas las secuencias colocadas pero ninguna transición entre clips. Tras seguir dándole caña, encontré que la forma de hacer los cross fades era esta:

sce = Scene.GetCurrent()
seq = sce.sequence
nu_strip = seq.new((13, strip_izquierdo, strip_derecho), , )

El número mágico, el "13" que aparece en el código puede obtenerse de la lista de códigos mágicos del código fuente de blender. En el fichero DNA_sequence_types.h, en el directorio: source/blender/makesdna

...
#define SEQ_ADD 9
#define SEQ_SUB 10
#define SEQ_ALPHAOVER 11
#define SEQ_ALPHAUNDER 12
#define SEQ_GAMCROSS 13
#define SEQ_MUL 14
#define SEQ_OVERDROP 15
#define SEQ_PLUGIN 24
#define SEQ_WIPE 25
#define SEQ_GLOW 26
#define SEQ_TRANSFORM 27
#define SEQ_COLOR 28
#define SEQ_SPEED 29
#define SEQ_EFFECT_MAX 29
...

No termina de gustarme el asunto de que ponga "gammacross" sin embargo, como puede verse en el vídeo embebido tiene el efecto que estoy buscando de cross entre vídeos.

Si refino esto un poco más intentaré buscar un hueco para contarlo aqui.

De cara a lanzar el proceso, opté por la simplicidad y utilicé una combinación de fichero .blend preconfigurado y mis propios módulos de python:

blender -b video_writting.blend -P my_script.py

Donde en my_script.py defino la longitud total del vídeo, su posición, etc. Los atributos del tipo de vídeo, tamaño de salida, etc. están en el propio .blend haciendo el proceso bastante más sencillo.


--
Podeís ver el resultado también aqui, en vimeo.
PD: blogger es una pesadilla para publicar un maldito vídeo de 500 K

domingo, 11 de octubre de 2009

Google week - wave

Durante esta semana Google se me ha adelantado publicando Wave. No voy a describir qué es ni para qué vale, porque no puedo, ni siquiera tras zamparme la kilométrica demo del producto.

Para los muy interesados, os sugiero la presentación de google wave. Donde he encontrado un detalle que me ha gustado mucho, cuando el presentador cita al equipo de Google Web Toolkit. Sé que todo les queda en casa pero estas cosas, como a cualquier desarrollador, me gusta verlas.

El sitio web del protocolo base está albergado en uno de esos proyectos silenciosos que se mencionan a veces en el mundillo google: wave protocol. En cualquier caso espero que los desarrolladores nos mantengan al día de todo lo que va pasando por las mentes del equipo de soft, concretamente desde aqui: wave developer blog .


Por otro lado sigo a vueltitas con mi Houdini en la versión 10.0.3xy un cañonazo de software que, conforme lo vas conociendo, te convence de que estabas sumido en la sombra hasta el momento.

¡Ah! y casi me olvido: debido a dificultades técnicas con mi antiguo blog: the long tomorrow, me he mudado a este lado del mundo. Ha sido una temporada muy buena y espero que les vaya bien.