O que é compressão com perdas?
A compressão com perdas reduz o tamanho do arquivo descartando irreversivelmente informações consideradas menos importantes para a qualidade percebida. A descompressão produz uma aproximação, em vez dos dados originais exatos.
Como funciona a compressão com perdas
Um codificador com perdas normalmente transforma as amostras em uma representação na qual detalhes perceptualmente menos importantes podem ser isolados, quantiza esses detalhes com menor precisão ou os descarta e aplica codificação por entropia ao que resta. A etapa de quantização descarta uma precisão que a decodificação não pode restaurar. O JPEG ilustra esse padrão: seus processos baseados em DCT quantizam coeficientes de frequência com uma tabela de quantização, as tabelas de exemplo do padrão se baseiam em limiares psicovisuais, e os codificadores também costumam armazenar a cor em resolução menor que a da luminosidade. Codificadores de vídeo acrescentam controle de taxa, que decide quanta quantização cada parte da imagem recebe; o x265, por exemplo, aumenta ou diminui a quantização por bloco conforme a complexidade da origem. Como essas decisões diferem entre codecs, codificadores e predefinições, resultados com a mesma taxa de bits nominal podem ter aparência ou som diferentes, por isso avalie as configurações com seu próprio conteúdo. Os pipelines normalmente mantêm a origem de maior qualidade disponível e criam cada versão derivada para entrega a partir dela, e não de outra versão derivada.
Informações essenciais
- Decodificar e recodificar com um codificador com perdas quantiza os dados novamente e geralmente acrescenta perdas; reutilizar a configuração de qualidade anterior não recupera o que já foi descartado. Algumas operações evitam isso trabalhando diretamente nos dados codificados: o
jpegtrando libjpeg-turbo, por exemplo, gira ou espelha um JPEG reorganizando seus coeficientes sem decodificar completamente a imagem, de modo que os dados da imagem são transformados sem degradação, o que seu manual contrasta com a decodificação e a recodificação. O manual também informa os limites:jpegtrannão pode alterar a qualidade da imagem; rotações e espelhamentos deixam blocos parciais das bordas sem transformação quando a dimensão da qual a transformação depende, a largura para-flip horizontalou-rotate 270, a altura para-flip verticalou-rotate 90, qualquer uma das duas para-rotate 180, não é um múltiplo do tamanho do bloco iMCU (geralmente 8 ou 16 pixels); e descartar esses blocos com-trimnão é estritamente sem perdas. - Os valores de qualidade são específicos de cada codificador e não são intercambiáveis.
cjpeg -qualityvai de 0 (pior) a 100 (melhor) e ajusta a escala das tabelas de quantização, enquanto o fator de taxa--crfdo x265 funciona no sentido oposto: um valor maior significa mais quantização e menor qualidade, e o tamanho do arquivo depende então da complexidade da origem. Compare os codificadores inspecionando ou medindo suas saídas, e não igualando os valores. - O topo de uma escala de qualidade não é necessariamente sem perdas. Para
cjpeg, a qualidade 100 apenas minimiza as perdas na etapa de quantização; a subamostragem e os erros de arredondamento ainda causam perda de informações. A reconstrução exata exige um modo ou formato sem perdas e, como alguns formatos, como WebP, oferecem ambos os modos, a extensão do arquivo não informa qual foi usado. - Trocar o contêiner não precisa causar perda de qualidade. A cópia de fluxos do FFmpeg (
-c copy) repassa os pacotes sem decodificar nem codificar, portanto não há perda de qualidade, mas ela pode falhar quando o contêiner de destino precisa de informações ausentes na origem. A cópia de fluxos não permite aplicar filtros. O redimensionamento é um filtro, portanto alterar as dimensões do vídeo exige transcodificação: decodificar e codificar novamente, o que, segundo a documentação do FFmpeg, degrada a qualidade na maioria dos casos.
Quando a compressão com perdas é importante
Use codificação com perdas quando a economia de largura de banda ou armazenamento justificar alguma perda de fidelidade de imagem, áudio ou vídeo. Configurações excessivas ou recompressões repetidas podem criar artefatos visíveis ou audíveis.
Como a Transloadit ajuda com a compressão com perdas
A Transloadit oferece a escolha entre compressão com ou sem perdas em seus Robots de imagem. /image/optimize usa apenas otimizadores PNG sem perdas por padrão; definir lossy: true permite que o compressor com perdas pngquant também participe, e o menor resultado vence. /image/resize tem um parâmetro quality que controla a compressão da saída JPG e PNG.
O parâmetro lossy afeta apenas a otimização de PNG. A documentação alerta que o pngquant reduz os PNGs a uma paleta de 256 cores, o que pode causar alterações perceptíveis de cor em imagens com paletas de cores ricas, gradientes sutis ou cores específicas de uma marca.
- Robot de otimização de imagens: o parâmetro lossy
- Robot de redimensionamento de imagens: o parâmetro quality
Explore os formatos de arquivo e os recursos de compressão da Transloadit
Fontes
- Glossário da MDN: compressão com perdas
- ITU-T T.81 | ISO/IEC 10918-1: requisitos e diretrizes de JPEG (quantização DCT, anexo K)
- libjpeg-turbo: uso de cjpeg e djpeg (a opção -quality)
- libjpeg-turbo: manual do jpegtran (transformações JPEG sem perdas)
- Documentação do x265: opções de linha de comando (CRF e quantização adaptativa)
- Documentação do FFmpeg: ferramenta ffmpeg (cópia de fluxos e transcodificação)