Esta tarde me encontré con la tarea de crear un gran vídeo juntando cientos de vídeos pequeños. Como un pase de diapositivas pero con pequeños vídeos en lugar de imágenes. Esto se puede hacer fácilmente con un editor de vídeo libre como Olive, el problema es que yo quiero que cada clip de vídeo vaya precedido por una diapositiva corta de título que contenga el nombre del archivo que viene a continuación como vemos en la siguiente imagen de ejemplo.
Obviamente crear estas imágenes manualmente o hacerlo con la función de crear títulos manualmente del programa de edición es impensable al ser cientos de archivos. Buscando un poco por internet me encontré con el siguiente script publicado por @monkeywithacupcake en Github.
#!/bin/zsh
# Asks a series of questions and then returns an image
# use like "bash catchphrase.sh"
echo "What is your favorite color?"
read theColor
echo "What is your catchphrase?"
read thePhrase
convert -size 1000x1000 xc:$theColor +repage \
-size 800x800 -fill white -background None \
-font CourierNewB -gravity center caption:"$thePhrase" +repage \
-gravity Center -composite -strip catchphraseimage.jpg
echo "See your special image at ${PWD}/catchphraseimage.jpg"
Tomando como este programa es muy sencillo crear un script que nos genere todas las imágenes de título para todos los vídeos que haya en un directorio. Quedaría de la siguiente manera:
for file in ./*
do
filename=$(echo $file | sed 's/.\///')
echo Creating $filename.jpg...
convert -size 1000x1000 xc:black +repage -size 800x800 -fill white -background None -font CourierNewB -gravity center caption:"$filename" +repage -gravity Center -composite -strip "$filename"2.jpg
done
En tan solo un momento este es el resultado: