Tienes 500 capturas de pantalla en PNG que necesitas convertir a WebP para tu sitio web. O una carpeta de exportaciones TIFF de Lightroom que deben ser JPG. FFmpeg es conocido principalmente como herramienta de vídeo, pero gestiona imágenes igual de bien — y como funciona desde la línea de comandos, procesa cualquier número de archivos con un solo comando.
¿Por qué usar FFmpeg para imágenes?
Es probable que FFmpeg ya esté instalado si haces trabajo de vídeo. Admite una amplia gama de formatos y se integra de forma natural en scripts de shell y pipelines CI. Para formatos RAW de cámara (CR2, NEF, ARW), usa darktable o RawTherapee — el soporte RAW de FFmpeg es limitado.
Instalar FFmpeg
# macOS
brew install ffmpeg
# Ubuntu / Debian
sudo apt install ffmpeg
# Windows (Chocolatey)
choco install ffmpegffmpeg -versionEl patrón básico
Cada comando de conversión en lote sigue la misma estructura: un bucle de shell (Linux/macOS) o un bucle for (Windows). Regla clave: nunca sobrescribas los archivos fuente — escribe siempre en un directorio de salida separado.
Convertir todos los PNG a JPG
mkdir -p output
for f in *.png; do
ffmpeg -i "$f" -q:v 2 "output/${f%.png}.jpg"
donemkdir output
for %f in (*.png) do ffmpeg -i "%f" -q:v 2 "output/%~nf.jpg"New-Item -ItemType Directory -Force output
Get-ChildItem *.png | ForEach-Object {
ffmpeg -i $_.FullName -q:v 2 "output/$($_.BaseName).jpg"
}| -q:v | Calidad | Uso típico |
|---|---|---|
| 1–2 | Casi sin pérdida | Impresión, archivado |
| 3–5 | Alta calidad | Fotografía web |
| 6–10 | Calidad media | Previsualizaciones |
| 11+ | Baja calidad | Evitar |
Convertir todos los JPG a WebP
mkdir -p output
for f in *.jpg *.jpeg; do
[ -f "$f" ] || continue
ffmpeg -i "$f" -quality 85 "output/${f%.*}.webp"
donemkdir -p output
for f in *.png; do
ffmpeg -i "$f" -lossless 1 "output/${f%.png}.webp"
doneWebP produce archivos un 25–35 % más pequeños que un JPG equivalente. Para fotografías, 80–85 es el rango óptimo de calidad. Para logos y gráficos con texto, usa WebP sin pérdida.
Convertir a PNG
mkdir -p output
for f in *.jpg *.jpeg; do
[ -f "$f" ] || continue
ffmpeg -i "$f" "output/${f%.*}.png"
doneConvertir formatos mixtos
mkdir -p output
for f in *.jpg *.jpeg *.png *.webp *.tiff *.bmp; do
[ -f "$f" ] || continue
ffmpeg -i "$f" -q:v 3 "output/${f%.*}.jpg"
doneRedimensionar y convertir en un solo paso
mkdir -p output
for f in *.png; do
ffmpeg -i "$f" -vf scale=1080:-1 -q:v 3 "output/${f%.png}.jpg"
donemkdir -p output
for f in *.jpg; do
ffmpeg -i "$f" -vf "crop='min(iw,ih)':'min(iw,ih)',scale=200:200" \
"output/${f%.jpg}_thumb.jpg"
doneProcesamiento recursivo de subdirectorios
find . -name "*.png" -not -path "./output*" | while read f; do
output="output/${f#./}"
mkdir -p "$(dirname "$output")"
ffmpeg -i "$f" -q:v 3 "${output%.png}.jpg"
doneProcesamiento paralelo para mayor velocidad
mkdir -p output
ls *.png | xargs -P 4 -I {} sh -c 'ffmpeg -i "$1" -q:v 3 "output/${1%.png}.jpg"' _ {}En una máquina de 8 núcleos con almacenamiento SSD, el procesamiento paralelo reduce típicamente el tiempo de conversión entre 3 y 5 veces.
Indicador de progreso
total=$(ls *.png | wc -l)
count=0
mkdir -p output
for f in *.png; do
count=$((count + 1))
echo "[$count/$total] $f"
ffmpeg -loglevel quiet -i "$f" -q:v 3 "output/${f%.png}.jpg"
doneManejo de errores
mkdir -p output
error_log="errors.txt"
> "$error_log"
for f in *.jpg *.jpeg *.png *.webp; do
[ -f "$f" ] || continue
if ffmpeg -loglevel error -i "$f" -quality 85 "output/${f%.*}.webp" 2>>"$error_log"; then
echo "✓ $f"
else
echo "✗ $f"
fi
doneReferencia de comandos
| Conversión | Comando (Linux/macOS) | Notas |
|---|---|---|
| Todos PNG → JPG | for f in *.png | do ffmpeg -i "$f" -q:v 3 output/${f%.png}.jpg |
| Todos JPG → WebP | for f in *.jpg | do ffmpeg -i "$f" -quality 85 output/${f%.jpg}.webp |
| Todos JPG → PNG | for f in *.jpg | do ffmpeg -i "$f" output/${f%.jpg}.png |
| Todos → WebP sin pérdida | for f in *.png | do ffmpeg -i "$f" -lossless 1 output/${f%.png}.webp |
| Redimensionar + convertir | for f in *.jpg | do ffmpeg -i "$f" -vf scale=1080:-1 -q:v 3 output/${f%.jpg}.jpg |
Cuándo FFmpeg no es la herramienta adecuada
Formatos RAW (CR2, NEF, ARW) — soporte limitado. Usa darktable o RawTherapee.
Codificación AVIF — posible con -c:v libaom-av1 pero muy lenta sin aceleración hardware. libavif o Squoosh CLI son más rápidos.
Perfiles de color ICC — FFmpeg no siempre los preserva. Para trabajo crítico de color, ImageMagick es más fiable.
¿Solo unos pocos archivos? Una herramienta online como FastConvert es más rápida — sin instalación.
Preguntas frecuentes
Resumen
La conversión en lote con FFmpeg se reduce a un bucle shell simple. Prueba siempre con un lote pequeño antes de procesar toda tu biblioteca.
¿Convertir imágenes sin línea de comandos? FastConvert — gratis, sin registro.