heif-convert (libheif) — la herramienta nativa más rápida
heif-convert es una utilidad de línea de comandos del proyecto libheif — la implementación de referencia del formato HEIF/HEIC. Decodifica archivos HEIC de forma nativa sin depender de delegates de ImageMagick ni de códecs externos. Es la misma biblioteca que utiliza CleverUtils.com en sus servidores backend para el procesamiento HEIC, junto con ImageMagick para el post-procesamiento.
Instalación
Instala las herramientas libheif para tu plataforma:
# Ubuntu / Debian
sudo apt install libheif-examples
# Fedora / RHEL
sudo dnf install libheif-tools
# macOS (Homebrew)
brew install libheif
# Arch Linux
sudo pacman -S libheif
Verifica la instalación:
heif-convert --version
Conversión básica
Convierte un único archivo a JPG con calidad 92:
heif-convert input.heic output.jpg -q 92
La opción -q establece la calidad JPEG (1–100). La calidad 92 es el punto ideal — visualmente idéntica al original HEIC manteniendo un tamaño de archivo razonable.
Conversión por lotes
Convierte cada archivo HEIC del directorio actual:
for f in *.heic *.HEIC; do
[ -e "$f" ] || continue
heif-convert "$f" "${f%.*}.jpg" -q 92
done
La protección [ -e "$f" ] || continue maneja el caso en que ningún archivo coincide con uno de los patrones glob (por ejemplo, no existen archivos .HEIC en mayúsculas).
Opciones útiles
| Opción | Descripción |
|---|---|
-q <1-100> | Calidad de salida JPEG. El valor por defecto varía según la build; especifícalo siempre explícitamente. |
--with-exif | Conserva los metadatos EXIF (modelo de cámara, GPS, fecha/hora) en el archivo de salida. |
-S | Extrae todas las imágenes de secuencias multi-imagen (por ejemplo Live Photos, ráfagas). |
-C <value> | Establece el método de submuestreo de croma: nearest-neighbor, bilinear. |
Consejo: si tus archivos HEIC provienen de un iPhone y necesitas las coordenadas GPS o los ajustes de cámara en la salida JPG, incluye siempre --with-exif. Sin ello, algunas builds de heif-convert descartarán los metadatos silenciosamente.
ImageMagick — la navaja suiza
ImageMagick es el conjunto de herramientas de procesamiento de imágenes más instalado en servidores Linux. Si tu sistema ya lo tiene, puede que no necesites nada más — las versiones recientes incluyen libheif como delegate para decodificar HEIC. CleverUtils.com usa ImageMagick para el post-procesamiento (redimensionado, ajuste de calidad, gestión de metadatos).
Instalación
# Ubuntu / Debian (with HEIC delegate)
sudo apt install imagemagick libheif-dev
# Fedora
sudo dnf install ImageMagick libheif-devel
# macOS
brew install imagemagick
Comprueba que el delegate HEIC está disponible:
magick identify -list format | grep -i heic
Si HEIC aparece en la salida, ImageMagick puede leer tus archivos directamente.
Conversión de un solo archivo
magick convert input.heic -quality 92 output.jpg
O con ImageMagick 7+, la forma más corta:
magick input.heic -quality 92 output.jpg
Conversión por lotes
for f in *.heic *.HEIC; do
[ -e "$f" ] || continue
magick "$f" -quality 92 "${f%.*}.jpg"
done
Opciones avanzadas
ImageMagick te permite redimensionar, eliminar metadatos o ajustar el espacio de color en el mismo comando:
# Convert and resize to max 2048px on the longest side
magick input.heic -quality 92 -resize 2048x2048\> output.jpg
# Convert and strip all metadata
magick input.heic -quality 92 -strip output.jpg
# Convert with specific colorspace
magick input.heic -quality 92 -colorspace sRGB output.jpg
FFmpeg — para flujos orientados a vídeo
FFmpeg es principalmente una herramienta de vídeo, pero puede decodificar archivos HEIC si se compiló con soporte HEVC. Resulta cómodo si FFmpeg ya forma parte de tu pipeline y quieres evitar instalar herramientas adicionales.
Instalación
# Ubuntu / Debian
sudo apt install ffmpeg
# Fedora
sudo dnf install ffmpeg-free
# macOS
brew install ffmpeg
Conversión
ffmpeg -i input.heic output.jpg
Para establecer la calidad JPEG (FFmpeg usa una escala de 2–31, donde 2 es la mejor):
ffmpeg -i input.heic -q:v 2 output.jpg
Conversión por lotes
for f in *.heic *.HEIC; do
[ -e "$f" ] || continue
ffmpeg -i "$f" -q:v 2 "${f%.*}.jpg" -y
done
La opción -y sobrescribe los archivos de salida existentes sin preguntar.
Nota: el soporte HEIC de FFmpeg depende de cómo se compiló. Algunos paquetes de distribución Linux (por ejemplo ffmpeg-free en Fedora) pueden carecer de decodificación HEVC por motivos de patentes. Si obtienes un error de decodificador, usa heif-convert o ImageMagick en su lugar.
Python — pillow-heif + Pillow
Para desarrolladores que necesitan convertir HEIC dentro de una aplicación o script Python, la biblioteca pillow-heif añade soporte HEIC a Pillow (PIL). Es útil para integrar la conversión en pipelines de datos, backends web o scripts de automatización.
Instalación
pip install pillow-heif Pillow
Conversión de un solo archivo
from pillow_heif import register_heif_opener
from PIL import Image
register_heif_opener()
img = Image.open("input.heic")
img.save("output.jpg", "JPEG", quality=92)
Script de conversión por lotes
import os
from pathlib import Path
from pillow_heif import register_heif_opener
from PIL import Image
register_heif_opener()
input_dir = Path("./photos")
output_dir = Path("./converted")
output_dir.mkdir(exist_ok=True)
for heic_file in input_dir.glob("*.heic"):
img = Image.open(heic_file)
jpg_path = output_dir / f"{heic_file.stem}.jpg"
img.save(jpg_path, "JPEG", quality=92)
print(f"Converted: {heic_file.name} -> {jpg_path.name}")
Preservar los datos EXIF
from pillow_heif import register_heif_opener
from PIL import Image
register_heif_opener()
img = Image.open("input.heic")
exif_data = img.info.get("exif", b"")
img.save("output.jpg", "JPEG", quality=92, exif=exif_data)
El parámetro exif pasa los bytes EXIF sin procesar a la salida JPG, conservando ajustes de cámara, coordenadas GPS y marcas de tiempo.
Terminal de macOS — sips (integrado)
macOS incluye sips (Scriptable Image Processing System) de serie. Admite HEIC de forma nativa porque macOS incorpora el códec HEVC. No requiere instalación.
Conversión de un solo archivo
sips -s format jpeg input.heic --out output.jpg
Conversión por lotes
mkdir -p converted
for f in *.heic *.HEIC; do
[ -e "$f" ] || continue
sips -s format jpeg "$f" --out "converted/${f%.*}.jpg"
done
Advertencia: sips elimina la mayoría de los metadatos EXIF durante la conversión de formato. Si necesitas conservar las coordenadas GPS o los ajustes de cámara, usa heif-convert --with-exif o ImageMagick en macOS en su lugar. Ambos están disponibles vía Homebrew.
PowerShell (Windows) — bucle de ImageMagick
En Windows, ImageMagick ofrece la opción de línea de comandos más fiable. Una vez instalado, puedes usar PowerShell para convertir por lotes:
Instalación
- Descarga el instalador de Windows desde
imagemagick.org/script/download.php(elige «Win64 dynamic»). - Ejecuta el instalador y marca «Add application directory to your system path».
- Abre una nueva ventana de PowerShell y verifica:
magick --version
Archivo único
magick convert photo.heic -quality 92 photo.jpg
Conversión por lotes
Get-ChildItem *.heic | ForEach-Object {
magick convert $_.FullName -quality 92 ($_.DirectoryName + "\" + $_.BaseName + ".jpg")
}
Esto convierte cada archivo .heic de la carpeta actual a JPG con calidad 92. Los archivos originales permanecen intactos.
Comparación de herramientas
| Herramienta | Plataformas | Lotes | Ctrl calidad | EXIF | Velocidad* |
|---|---|---|---|---|---|
| heif-convert | Linux, macOS | Sí | -q 1-100 | --with-exif | ~0,3 s / archivo |
| ImageMagick | Linux, macOS, Win | Sí | -quality | Por defecto | ~0,5 s / archivo |
| FFmpeg | Linux, macOS, Win | Sí | -q:v 2-31 | Por defecto | ~0,6 s / archivo |
| Python | Linux, macOS, Win | Sí | quality= | Manual | ~0,8 s / archivo |
| sips | solo macOS | Sí | Limitado | Elimina la mayoría | ~0,4 s / archivo |
| PowerShell | Windows | Sí | -quality | Por defecto | ~0,5 s / archivo |
*Tiempos aproximados para una foto de iPhone 12 MP (4032 × 3024) en hardware moderno. La velocidad real varía según CPU, E/S de disco y complejidad de la imagen.
Ajustes de calidad explicados
Cada herramienta utiliza una escala de calidad distinta. Así es como obtener resultados equivalentes entre herramientas:
| Calidad objetivo | heif-convert / IM | FFmpeg (-q:v) | Python (Pillow) |
|---|---|---|---|
| Máxima | -q 100 |
-q:v 2 |
quality=100 |
| Óptima (CleverUtils) | -q 92 |
-q:v 3 |
quality=92 |
| Buena | -q 85 |
-q:v 5 |
quality=85 |
| Optimizada para web | -q 75 |
-q:v 8 |
quality=75 |
¿Por qué calidad 92? Es el ajuste que CleverUtils.com usa en producción. A 92, el JPG convertido es visualmente idéntico al original HEIC en condiciones normales de visualización. Subir más (95+) infla el tamaño del archivo un 30–50 % sin mejora perceptible. Por debajo de 85, los artefactos de compresión se hacen visibles en los degradados del cielo y en las texturas finas.
¿No quieres usar la línea de comandos?
Si prefieres saltarte la instalación de herramientas, la configuración de delegates y los bucles de shell — el widget de conversión al principio de esta página hace lo mismo en tu navegador. Sube un archivo HEIC y recibe un JPG en segundos. CleverUtils.com utiliza heif-convert + ImageMagick en sus servidores — las mismas herramientas tratadas en este artículo, ya configuradas y optimizadas.