A veces uno necesita hacer alguna operación con imagenes y no encuetra software que pueda ayudarle. En concreto a mi me ha surgido la necesidad de poder revisar una secuencia de frames y eliminar los frames repetidos.
La solución más sencilla parecía hacer un script con python, uno de esos homúnculos modernos que realizan tareas automáticas para su creador. Y un día despues, parece que lo ha sido.
El otro día al volver de telenoika de debatir el asunto con eduard, me puse a buscar la manera de abordar el tema con python (es mi primera incursión mas alla de leer/escribir ficheros txt y lejos de la api de blender).
Grata sorpresa número uno: La famosa Python Imaging Library (PIL) acude al rescate. Una manera elegante y simple de manejar imagenes con Python:
import Image
im = Image.open(“lena.ppm”)
y ya tenemos la imagen ahí.
Grata sorpresa número dos: El modulo ImageChops, una colección de operaciones clasicas, entre ellas la que yo necesito para comparar frames: subtract (diferencia)
import ImageChops
ImageChops.subtract(image1, image2, scale, offset) => image
Por lo que parece la libreria PIL esta incluida de serie en python, asi que directamente, me pude poner a hacer un sketch del script en la consola. Unas cuantas busquedas en google, que casi siempre acaban resueltas en stackoverflow.com y el script está funcionando.
Es una solución un poco engorrosa, pero es lo que tiene el spaguetti code… En cuanto aprenda a guardar frames sueltos en el gstreamer espero no tener que usarla más.
INSTRUCCIONES:
ejecutar el script dentro de una carpeta que contenga frames numerados consecutivos con extension .jpg (el script tiene apenas 50 lineas y no caben florituras) si no se cumplen las condiciones fallará.
Tambien se puede meter el script en la carpeta de nautilus scripts y ejecutar en una carpeta de nautilus tras seleccionar los ficheros a cribar.
El script es muy simple, nada de multithreat. Es bueno tenerlo en cuenta, si quereis usar dos o mas cpus para calcular, habrá que dividir la tarea en dos o mas carpetas y lanzarla dos o mas veces…
Enlaces:
http://www.pythonware.com/library/pil/handbook/index.htm
http://www.pythonware.com/library/pil/handbook/imagechops.htmdiference-frames3.py