heif-convert (libheif) — a ferramenta nativa mais rápida
heif-convert é um utilitário de linha de comando do projeto libheif — a implementação de referência do formato HEIF/HEIC. Ele decodifica arquivos HEIC nativamente sem depender de delegates do ImageMagick nem de codecs externos. Esta é a mesma biblioteca que o CleverUtils.com utiliza em seus servidores backend para o processamento HEIC, junto com o ImageMagick para pós-processamento.
Instalação
Instale as ferramentas libheif para sua 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
Verifique a instalação:
heif-convert --version
Conversão básica
Converter um único arquivo em JPG com qualidade 92:
heif-convert input.heic output.jpg -q 92
A flag -q define a qualidade JPEG (1–100). A qualidade 92 é o ponto ideal — visualmente idêntica ao original HEIC, mantendo o tamanho do arquivo razoável.
Conversão em lote
Converter todos os arquivos HEIC do diretório atual:
for f in *.heic *.HEIC; do
[ -e "$f" ] || continue
heif-convert "$f" "${f%.*}.jpg" -q 92
done
A proteção [ -e "$f" ] || continue lida com o caso em que nenhum arquivo corresponde a um dos padrões glob (por exemplo, nenhum arquivo .HEIC em maiúsculas existe).
Flags úteis
| Flag | Descrição |
|---|---|
-q <1-100> | Qualidade de saída JPEG. O valor padrão varia conforme o build; sempre especifique explicitamente. |
--with-exif | Preserva metadados EXIF (modelo da câmera, GPS, data/hora) no arquivo de saída. |
-S | Extrai todas as imagens de sequências multi-imagem (por exemplo Live Photos, rajadas). |
-C <value> | Define o método de upsampling de croma: nearest-neighbor, bilinear. |
Dica: se seus arquivos HEIC vêm de um iPhone e você precisa das coordenadas GPS ou configurações da câmera na saída JPG, sempre inclua --with-exif. Sem isso, alguns builds do heif-convert descartarão silenciosamente os metadados.
ImageMagick — o canivete suíço
O ImageMagick é o conjunto de ferramentas de processamento de imagens mais instalado em servidores Linux. Se seu sistema já o possui, talvez você não precise de mais nada — versões recentes incluem libheif como delegate para decodificação HEIC. O CleverUtils.com usa ImageMagick para pós-processamento após a conversão (redimensionamento, ajuste de qualidade, manipulação de metadados).
Instalação
# Ubuntu / Debian (with HEIC delegate)
sudo apt install imagemagick libheif-dev
# Fedora
sudo dnf install ImageMagick libheif-devel
# macOS
brew install imagemagick
Verifique se o delegate HEIC está disponível:
magick identify -list format | grep -i heic
Se HEIC aparecer na saída, o ImageMagick pode ler seus arquivos diretamente.
Conversão de arquivo único
magick convert input.heic -quality 92 output.jpg
Ou com o ImageMagick 7+, a forma abreviada:
magick input.heic -quality 92 output.jpg
Conversão em lote
for f in *.heic *.HEIC; do
[ -e "$f" ] || continue
magick "$f" -quality 92 "${f%.*}.jpg"
done
Opções avançadas
O ImageMagick permite redimensionar, remover metadados ou ajustar o espaço de cores no mesmo 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 fluxos orientados a vídeo
O FFmpeg é principalmente uma ferramenta de vídeo, mas pode decodificar arquivos HEIC se tiver sido compilado com suporte a HEVC. Isso é conveniente se o FFmpeg já faz parte do seu pipeline e você quer evitar instalar ferramentas adicionais.
Instalação
# Ubuntu / Debian
sudo apt install ffmpeg
# Fedora
sudo dnf install ffmpeg-free
# macOS
brew install ffmpeg
Conversão
ffmpeg -i input.heic output.jpg
Para definir a qualidade JPEG (o FFmpeg usa uma escala de 2–31, onde 2 é a melhor):
ffmpeg -i input.heic -q:v 2 output.jpg
Conversão em lote
for f in *.heic *.HEIC; do
[ -e "$f" ] || continue
ffmpeg -i "$f" -q:v 2 "${f%.*}.jpg" -y
done
A flag -y sobrescreve os arquivos de saída existentes sem perguntar.
Observação: o suporte HEIC do FFmpeg depende de como ele foi compilado. Alguns pacotes de distribuições Linux (por exemplo, ffmpeg-free no Fedora) podem não ter decodificação HEVC por questões de patentes. Se obtiver um erro de decodificador, use heif-convert ou ImageMagick.
Python — pillow-heif + Pillow
Para desenvolvedores que precisam converter HEIC dentro de uma aplicação ou script Python, a biblioteca pillow-heif adiciona suporte HEIC ao Pillow (PIL). É útil para integrar a conversão em pipelines de dados, backends web ou scripts de automação.
Instalação
pip install pillow-heif Pillow
Conversão de arquivo único
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 conversão em lote
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}")
Preservando dados 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)
O parâmetro exif repassa os bytes EXIF brutos para a saída JPG, preservando configurações da câmera, coordenadas GPS e carimbos de data/hora.
Terminal do macOS — sips (integrado)
O macOS inclui sips (Scriptable Image Processing System) de fábrica. Ele oferece suporte nativo a HEIC porque o macOS inclui o codec HEVC. Nenhuma instalação é necessária.
Conversão de arquivo único
sips -s format jpeg input.heic --out output.jpg
Conversão em lote
mkdir -p converted
for f in *.heic *.HEIC; do
[ -e "$f" ] || continue
sips -s format jpeg "$f" --out "converted/${f%.*}.jpg"
done
Ressalva: o sips remove a maior parte dos metadados EXIF durante a conversão de formato. Se você precisa preservar coordenadas GPS ou configurações da câmera, use heif-convert --with-exif ou ImageMagick no macOS. Ambos estão disponíveis via Homebrew.
PowerShell (Windows) — loop com ImageMagick
No Windows, o ImageMagick oferece a opção de linha de comando mais confiável. Após instalado, você pode usar o PowerShell para converter em lote:
Instalação
- Baixe o instalador para Windows em
imagemagick.org/script/download.php(escolha «Win64 dynamic»). - Execute o instalador e marque «Add application directory to your system path».
- Abra uma nova janela do PowerShell e verifique:
magick --version
Arquivo único
magick convert photo.heic -quality 92 photo.jpg
Conversão em lote
Get-ChildItem *.heic | ForEach-Object {
magick convert $_.FullName -quality 92 ($_.DirectoryName + "\" + $_.BaseName + ".jpg")
}
Isso converte todos os arquivos .heic da pasta atual em JPG com qualidade 92. Os arquivos originais permanecem intactos.
Comparação de ferramentas
| Ferramenta | Plataformas | Lote | Ctrl qualidade | EXIF | Velocidade* |
|---|---|---|---|---|---|
| heif-convert | Linux, macOS | Sim | -q 1-100 | --with-exif | ~0,3 s / arquivo |
| ImageMagick | Linux, macOS, Win | Sim | -quality | Por padrão | ~0,5 s / arquivo |
| FFmpeg | Linux, macOS, Win | Sim | -q:v 2-31 | Por padrão | ~0,6 s / arquivo |
| Python | Linux, macOS, Win | Sim | quality= | Manual | ~0,8 s / arquivo |
| sips | apenas macOS | Sim | Limitada | Remove a maioria | ~0,4 s / arquivo |
| PowerShell | Windows | Sim | -quality | Por padrão | ~0,5 s / arquivo |
*Tempos aproximados para uma foto de iPhone 12 MP (4032 × 3024) em hardware moderno. A velocidade real varia conforme CPU, E/S de disco e complexidade da imagem.
Configurações de qualidade explicadas
Cada ferramenta usa uma escala de qualidade diferente. Veja como obter saída equivalente entre as ferramentas:
| Qualidade alvo | heif-convert / IM | FFmpeg (-q:v) | Python (Pillow) |
|---|---|---|---|
| Máxima | -q 100 |
-q:v 2 |
quality=100 |
| Ótima (CleverUtils) | -q 92 |
-q:v 3 |
quality=92 |
| Boa | -q 85 |
-q:v 5 |
quality=85 |
| Otimizada para web | -q 75 |
-q:v 8 |
quality=75 |
Por que qualidade 92? Esta é a configuração que o CleverUtils.com usa em produção. Em 92, o JPG convertido é visualmente idêntico ao original HEIC em condições normais de visualização. Subir mais (95+) infla o tamanho do arquivo em 30–50 % sem melhora perceptível. Abaixo de 85, artefatos de compressão ficam visíveis em gradientes de céu e texturas finas.
Não quer usar a linha de comando?
Se preferir evitar a instalação de ferramentas, a configuração de delegates e a escrita de loops de shell — o widget de conversão no topo desta página faz o mesmo no seu navegador. Envie um arquivo HEIC e receba um JPG em segundos. O CleverUtils.com usa heif-convert + ImageMagick em seus servidores — as mesmas ferramentas abordadas neste artigo, já configuradas e otimizadas.