Reducir imágenes de distintas formas y tamaños a un area determinada

Escenario

Un directorio plagado de imágenes horizantales, verticales, grandes y más grandes dispuestas en subdirectorios y más subdirectorios.

Problema

Convertir todas las imágenes a un tamaño (area: base por altura) determinado, sin importar que sean horizontales, verticales, 16/9 o 4/3.

Solución

Utilizando el parámetro -resize de convert dentro un bash recursivo.

#!/bin/bash

sudo find $1 -name *.jpg |
while read FILENAME
do
  DESTINATION="./Converted/"$FILENAME""
  BASEDIR="`dirname "$DESTINATION"`"

  echo $FILENAME
  echo $DESTINATION
  echo $BASEDIR

  if [ ! -d "$BASEDIR" ]
  then
    mkdir -p "$BASEDIR"
  fi

  convert -quality 90 -resize '12000000@>' "$FILENAME" "$DESTINATION"

done

Para ejecutarlo:

./convert.sh Pictures/