jueves, 9 de diciembre de 2010

Crear imágenes monocromas con FFMpeg

Al pensar en FFmpeg como el mejor conversor de multimedia, nos solemos olvidar de que, aparte de vídeo y audio, también maneja imágenes.

En los sistemas Unix tenemos /dev/zero que es una fuente de ceros. Sólo tenemos que darle un tamaño, y una profundidad de bits para tener una imagen de color negro:

# Black image bgra PNG
ffmpeg -vframes 1 -s 64x32 -pix_fmt rgb32 -f rawvideo -i /dev/zero -pix_fmt rgb32 black64x32.png
# Black image rgb PNG
ffmpeg -vframes 1 -s 64x32 -pix_fmt rgb24 -f rawvideo -i /dev/zero -pix_fmt rgb24 black64x32.png


Si queremos otros colores, la cosa se complica: hay que usar filtros (lo cual implica un ffmpeg muy reciente). Los pasos son leer cualquier imagen de partida, superponer el generador de colores, y escalar al tamaño deseado:

# Gray image 50% transparent
ffmpeg -i black64x32.png -vf 'color=gray@.5:64x32:25 [over]; [in][over] overlay [out]' -vf scale=640:200:rgba -pix_fmt rgb32 gray640x200.png
# Gray image
ffmpeg -i black64x32.png -vf 'color=gray:64x32:25 [over]; [in][over] overlay [out]' -vf scale=640:200:rgb24 -pix_fmt rgb24 gray640x200.png


Recordad que, de todos los formatos de píxels que muestra ffmpeg -pix_fmts, sólo rgb32 y yuva420p permiten transparencia.