dic 20 2010
Generación de videos Time-Lapse en HDR desde Linux
He realizado un script que automatiza la generación de videos HDR desde Linux a partir de una serie de fotografías en formato RAW.
El script está preparado para recortar las imágenes y aplicar el efecto HDR mantiuk a acada una de ellas.
La última versión se puede descargar aquí: HDR Time-Lapse Generation Script
# Raw files to process
RAW_FILES=input_test/*.CR2
# Output directory
OUT=./output
# Position and size of the rectangle to cut in the original photographs
# The proportion should be fit with the VIDEO_WIDTH and VIDEO_HEIGHT parameters
LEFT=838
TOP=1374
WIDTH=2255
HEIGHT=1259
# Size of the output video. Recommended format for youtube HD 1290x720
VIDEO_WIDTH=1290
VIDEO_HEIGHT=720
# Frames per second
VIDEO_FPS=16
rm -Rf $OUT
mkdir $OUT $OUT/img
files=`ls $RAW_FILES -1`
totalFiles=`ls $RAW_FILES -1 | wc -l`
counter=0
for fRaw in $files ; do
echo "Processing image... ${counter}/${totalFiles}"
strCounter=`printf %04d $counter`
fMantiuk=${OUT}/img/mantiuk_${strCounter}.tiff
fOrig=${OUT}/img/orig_${strCounter}.tiff
fFinal=${OUT}/img/final_${strCounter}.tiff
# HDR Mantiuk generation
dcraw2hdrgen $fRaw > hdrgen.txt
pfsinhdrgen hdrgen.txt | pfsout pfs.hdr
pfsin pfs.hdr \
| pfscut --left ${LEFT} --top ${TOP} --width ${WIDTH} --height ${HEIGHT} \
| pfssize -x ${VIDEO_WIDTH} -y ${VIDEO_HEIGHT} \
| pfstmo_mantiuk06 -e 1 -s 1 \
| pfsgamma --gamma 1.8 \
| pfsoutimgmagick ${fMantiuk} 2>/dev/null
# Original image generation without effects
ufraw-batch $fRaw \
--wb=camera \
--crop-left=${LEFT} \
--crop-right=$((LEFT+WIDTH)) \
--crop-top=${TOP} \
--crop-bottom=$((TOP+HEIGHT)) \
--overwrite \
--size=${VIDEO_WIDTH} \
--output=${fOrig} \
--out-type=tiff \
--exposure=0 2>/dev/null
# Final image generation
composite -dissolve 80% ${fMantiuk} ${fOrig} ${fFinal} 2>/dev/null
# Optimization (increase of color saturation)
convert -modulate 100,110,100 ${fFinal} ${fFinal}
counter=$(( $counter + 1 ))
done
# Video encoding
mencoder -nosound -ovc x264 -x264encopts pass=1:bitrate=3000 -o ${OUT}/output.avi -mf type=tif:fps=${VIDEO_FPS} "mf://${OUT}/img/final_*.tiff"
Para configurar los parámetros de recorte se puede utilizar por ejemplo el programa Gimp. Para ello, abrimos una de las imágenes RAW originales(necesitaremos instalar el plugin ufraw para esto). Seleccionamos la herramienta de selección de rectángulos y configuramos el tamaño del rectángulo. En este caso, para subir videos a youtube en alta definición pondríamos 1290×70. Una vez tenemos el rectángulo lo ampliamos o reducimos al tamaño que queramos manteniendo siempre la proporción y nos apuntamos la posición y tamaño del recuadro final para configurar el script.

Para ejecutar el script es necesario tener instalados los programas pfstools, pfsmo, pfscalibration, imagemagick y mencoder. Si utilizamos ubuntu, los podemos instalar todos mediante el gestor de paquetes excepto el pfscalibration que hay que compilarlo.
Y el resultado final. Está realizado a partir de 88 fotografias tomadas cada 10 segundos. Alrededor de 15 minutos de tiempo reducidos a 5 segundos de video.