Convertir imágenes a WebP en local con ImageMagick y PowerShell
Cuando tienes una web con cientos de imágenes JPG o PNG y quieres pasarlas todas a WebP, la tentación es instalar un plugin o un script que las convierta directamente en el servidor, en el momento de subirlas o mediante un cron. En un hosting con recursos ilimitados no pasa nada. En un hosting compartido con límites de CPU (que es la mayoría de los planes económicos), convertir decenas o cientos de imágenes de golpe es exactamente el tipo de tarea que hace saltar el "resource limit reached" y puede tumbar temporalmente el resto de tu web mientras el proceso se ejecuta.
La alternativa que he probado y que funciona bien: hacer la conversión en tu propio ordenador con ImageMagick y PowerShell, y subir después solo los archivos WebP ya generados. El servidor no ejecuta ni un solo proceso de conversión — se limita a servir ficheros estáticos, que es lo que mejor sabe hacer.
Por qué importa dónde se hace la conversión
En un hosting compartido, un proceso de imagen es de los que más CPU consume de forma puntual: decodificar el original, recalcular la compresión y volver a codificar en otro formato son operaciones intensivas. El proveedor tiene un vigilante de recursos que mata los procesos que se pasan de su cuota — no es un fallo tuyo, es una protección para que un usuario no hunda el rendimiento de los demás en el mismo servidor. Si esa conversión ocurre además durante el pico de tráfico de tu web (por ejemplo, al desplegar contenido nuevo), el resultado puede notarse como lentitud o incluso caídas puntuales para tus visitantes reales.
Convertir en local elimina ese riesgo por completo: el trabajo pesado ocurre en tu ordenador, que no tiene ninguna cuota que respetar, y al hosting solo le llega el resultado final ya optimizado. Si solo son unas pocas imágenes, convertirlas a WebP en el navegador te ahorra incluso instalar ImageMagick.
Instalar ImageMagick en Windows
Descarga el instalador desde imagemagick.org (la versión Q16-HDRI para Windows). Las versiones actuales incluyen soporte para WebP de fábrica, así que no hace falta instalar nada más aparte de PowerShell, que ya viene con Windows.
Para comprobar que quedó bien instalado, abre PowerShell y ejecuta:
magick -version
El comando que uso: convertir una carpeta entera de una vez
Para convertir todos los JPG y PNG de una carpeta (incluidas las subcarpetas) a WebP con calidad 82, sin tocar los originales:
magick mogrify -path .\webp -format webp -quality 82 .\imagenes\*.jpg
magick mogrify -path .\webp -format webp -quality 82 .\imagenes\*.png
mogrify es la orden de ImageMagick pensada para procesar varios archivos a la vez; -path le dice dónde guardar el resultado (así los originales quedan intactos en su carpeta), y -format webp fija el formato de salida sin importar el de entrada.
Si necesitas recorrer también las subcarpetas manteniendo su estructura, esta versión en PowerShell puro hace el trabajo y conserva las rutas relativas:
Get-ChildItem -Path .\imagenes -Recurse -Include *.jpg,*.jpeg,*.png | ForEach-Object {
$relativo = $_.FullName.Substring((Resolve-Path .\imagenes).Path.Length)
$destino = Join-Path .\webp ($relativo -replace '\.(jpg|jpeg|png)$', '.webp')
New-Item -ItemType Directory -Force -Path (Split-Path $destino) | Out-Null
magick $_.FullName -quality 82 $destino
}
Qué calidad usar
Con -quality entre 75 y 85 la diferencia visual frente al JPG o PNG original es prácticamente imperceptible en pantalla, y el archivo suele pesar entre un 25% y un 35% menos que su equivalente JPG (y bastante más si el original es un PNG con fotografía, no con gráficos planos). Por debajo de 70 empiezan a notarse artefactos en zonas con degradados suaves, igual que le pasa al JPG.
Si alguna imagen tiene transparencia o es un gráfico con pocos colores (logos, iconos), añade -define webp:lossless=true para no perder nitidez en los bordes.
Solo convertir lo nuevo, no repetir todo el trabajo
Cuando ya tienes la carpeta webp generada y solo has añadido unas pocas imágenes, no compensa relanzar la conversión de todo el sitio. Esta variante compara fechas y solo convierte lo que sea más reciente que su WebP correspondiente (o que no exista todavía):
Get-ChildItem -Path .\imagenes -Recurse -Include *.jpg,*.png | ForEach-Object {
$destino = Join-Path .\webp ($_.BaseName + ".webp")
if (-not (Test-Path $destino) -or $_.LastWriteTime -gt (Get-Item $destino).LastWriteTime) {
magick $_.FullName -quality 82 $destino
}
}
Esto convierte el proceso en algo que puedes repetir cada vez que añades fotos nuevas, en segundos, sin volver a procesar lo que ya estaba hecho.
Subir el resultado al hosting
Una vez generados los WebP en local, solo queda subirlos por FTP/SFTP o el gestor de archivos de tu panel, igual que cualquier otro archivo estático. El servidor no ejecuta nada: se limita a servirlos, que es una tarea prácticamente gratis en términos de CPU comparada con la conversión.
Un detalle que conviene resolver a la vez: si tu web sirve las imágenes con etiquetas <img> normales, tendrás que apuntarlas al nuevo .webp o usar un bloque <picture> con el JPG/PNG como fallback para navegadores muy antiguos que no soporten WebP (hoy son una minoría residual, pero el fallback cuesta una línea de HTML).
Funciona igual en WordPress, PrestaShop o cualquier CMS
Este método no depende de la plataforma: convierte las imágenes en local y luego súbelas a la biblioteca de medios de tu CMS como harías con cualquier archivo.
- WordPress: sube los
.webpgenerados desde Medios → Añadir nuevo, o reemplaza los ficheros directamente enwp-content/uploads/por (S)FTP si prefieres conservar las mismas URLs. - PrestaShop: las imágenes de producto viven en
/img/p/y/img/c/; puedes subir las versiones WebP ahí o desde el back office, según la plantilla que uses para servirlas. - Cualquier otro CMS (Joomla, Drupal, un sitio estático): el proceso es el mismo — conviertes en tu ordenador y subes el resultado por el mismo canal que usarías para cualquier imagen nueva.
Haz una copia de seguridad antes de cada conversión. Si vas a sustituir las imágenes originales (en vez de solo añadir las .webp junto a ellas), guarda una copia de la carpeta de medios o de wp-content/uploads/ antes de sobrescribir nada. Un error de nombre o de ruta en un lote grande es fácil de cometer y, sin copia, difícil de deshacer.
Cuándo NO hace falta este proceso
Si tu hosting no tiene límites de CPU agresivos (un VPS o servidor dedicado propio, por ejemplo), o si ya usas un CDN o un servicio de optimización de imágenes que las transforma al vuelo sin coste para tu servidor de origen, este paso manual es opcional — sigue siendo útil para tener control total sobre la calidad, pero no es una necesidad urgente. Donde de verdad marca la diferencia es en hosting compartido de gama económica, que es el escenario donde lo he probado y donde el ahorro de CPU se nota en si tu web sigue respondiendo mientras conviertes cien fotos.
Para un lote pequeño no hace falta instalar nada: usa el conversor WebP a JPG en el navegador, sin subir tus fotos a ningún servidor.
Convertir WebP a JPG ahora
Preguntas frecuentes
¿Por qué convertir imágenes a WebP en mi propio ordenador y no en el servidor?
Porque muchos hostings compartidos matan procesos que consumen demasiada CPU o memoria, y la conversión de imágenes es una causa habitual. Haciéndolo en local antes de subir los archivos, el hosting solo sirve ficheros ya optimizados, sin gastar sus recursos ni arriesgarse a un "resource limit reached".
¿Qué calidad de WebP debo usar para una web?
Entre 75 y 85 suele ser el punto dulce: la diferencia visual frente al original es prácticamente imperceptible y el archivo pesa bastante menos que el JPG o PNG equivalente.
¿ImageMagick sirve para convertir en lote toda una carpeta de imágenes?
Sí, con el comando mogrify se puede convertir una carpeta entera (incluyendo subcarpetas) de una sola vez, indicando el formato de salida y la calidad deseada.
¿Necesito instalar algo más aparte de ImageMagick?
No. ImageMagick para Windows incluye soporte para WebP de serie en las versiones recientes. Solo hace falta instalarlo y usar PowerShell, que ya viene con Windows.
¿Funciona con WordPress, PrestaShop u otro CMS?
Sí. El proceso ocurre fuera del CMS: conviertes las imágenes en tu ordenador y luego las subes a la biblioteca de medios (WordPress), a las carpetas de imágenes de producto (PrestaShop) o al gestor de ficheros que use tu plataforma, igual que subirías cualquier otra imagen.
¿Hace falta hacer copia de seguridad antes?
Sí, si vas a sustituir los originales en vez de añadir los WebP junto a ellos. Guarda una copia de la carpeta de medios antes de sobrescribir nada — un error en un lote grande es difícil de deshacer sin ella.