Análise dos prós e contras da tecnologia WebP (2021)
(eng.aurelienpierre.com)- Com o suporte a WebP pelo WordPress e pelos principais navegadores, ficou mais fácil migrar bibliotecas de fotos, mas em fotografias reais danos como posterização e ringing aparecem mais do que a redução do tamanho dos arquivos
- O Google e vários plugins do WordPress afirmam que WebP é menor que JPEG e que
lossy 80é suficiente, mas converter JPEGs existentes novamente para WebP pode acumular compressão com perdas - Em imagens nas quais gradientes suaves são importantes, como retratos de estúdio e scans de filme, WebP 95~96 apresentou resultados semelhantes ou mais pesados que JPEG 85+ruído
- Comparações de SSIM médio e tamanho médio de arquivo não garantem a cobertura dos piores casos de que fotógrafos precisam; em sites onde é difícil ajustar a qualidade imagem por imagem, a estabilidade é mais importante
- Para sites em que a qualidade da imagem é importante, é mais realista manter JPEG 85~90, adicionar dithering ou ruído fino, evitar recodificar JPEGs existentes em WebP e usar CDN, imagens responsivas e lazy loading
Expectativas com a adoção do WebP e problemas reais
- Com o WordPress aceitando uploads com o tipo MIME
image/webpe os principais navegadores passando a exibir WebP depois de setembro de 2020, ficou mais fácil migrar bibliotecas de fotos para WebP - O WebP parece uma opção atraente por comparações que indicam 15% menos tamanho que JPEG na mesma qualidade e pelos números do Google de 25% a 34% menos tamanho
- Há muitos plugins no WordPress que convertem bibliotecas de mídia existentes para WebP, e boa parte deles funciona no modelo SaaS, fazendo a conversão em servidores externos
- Alguns plugins e documentos técnicos dizem que qualidade WebP acima de
lossy 80é desnecessária para a maioria das fotos, mas exemplos com logotipos não representam suficientemente os problemas do trabalho fotográfico real
Danos ao recomprimir JPEGs existentes para WebP
- Depois de converter em lote a mídia do WordPress com qualidade
lossy 80, surgiram anéis posterizados no fundo - A imagem problemática era um scan de médio formato 6×7 cm, fotografado em filme Ilford Delta 400 com uma Mamiya RB 67, partindo de um scan original de 16 bits
- Os grãos de prata do Delta 400 funcionam como uma espécie de dithering natural, o que ajuda a evitar posterização em áreas suaves, mas após a conversão para WebP o gradiente se quebrou em degraus
- O JPEG original em qualidade 85 também não era perfeitamente limpo, mas era melhor que a versão convertida para WebP, e o impacto de empilhar mais uma compressão com perdas em WebP sobre um JPEG já comprimido com perdas foi grande
- O Google Page Speed Insights e vários plugins recomendam ou facilitam esse fluxo de recodificação, mas a perda real de qualidade não é segura
Experimentos comparativos em fotos reais
- Mesmo ao codificar fotos RAW diretamente pelo darktable, em uma condição de apenas uma compressão, os pontos fracos do WebP foram confirmados
- A imagem de teste é um headshot real de estúdio, em que iluminação suave e gradiente de fundo são importantes
- Ao salvar JPEG e WebP ambos com qualidade 90 e aplicar Floyd-Steinberg dithering de 8 bits, o resultado foi:
- JPEG 85 e WebP 90 foram ambos avaliados como falhos
- O WebP pareceu pior porque os anéis de posterização tinham contraste mais alto
- WebP 90 ainda manteve o problema, mesmo sendo uma qualidade 10 pontos acima do valor recomendado
lossy 80 - JPEG 90 pareceu aceitável, mas o arquivo era maior
- Ao salvar WebP como sem perdas, a qualidade ficou limpa, mas o tamanho do arquivo não foi satisfatório; JPEG 90 era difícil de distinguir com cerca de um terço desse tamanho, e JPEG 95 parecia semelhante com pouco mais da metade do tamanho
- Em um teste que adicionou ruído aleatório de -48 dB PSNR em vez de Floyd-Steinberg dithering, o WebP continuou mais vulnerável à posterização
- A qualidade WebP que ficava suavizada de forma semelhante a JPEG 85+ruído estava entre 95 e 96
- Nessa condição, o WebP ficou 39% mais pesado que JPEG 85+ruído e também 30% mais pesado que JPEG 90+Floyd-Steinberg dithering
- O resultado em WebP ainda manteve um ringing fraco
A lacuna entre métricas médias e qualidade fotográfica
- A avaliação da superioridade do WebP depende fortemente do SSIM médio e do tamanho médio em bits em datasets de imagens
- Valores médios não garantem a estabilidade de saída exigida por fotógrafos em portfólios na web
- Um portfólio fotográfico não é um domínio em que o backend de compressão possa falhar arbitrariamente
- Ajustar finamente a qualidade WebP para cada imagem consome muito tempo, e considera-se que esse método também é difícil no WordPress
- SSIM é uma métrica de similaridade de imagens baseada em média, variância e covariância, por isso não reflete suficientemente métricas perceptuais reais e é controversa
- Em danos de compressão, não importa apenas a magnitude do desvio numérico, mas também a natureza dos artefatos
- Ruído aleatório pode ser tolerável até certo ponto
- Manchas com padrão ou gradientes em degraus estragam muito mais a foto
Cenas em que o WebP é especialmente fraco
- No trabalho fotográfico, as cenas mais difíceis muitas vezes envolvem gradientes suaves, não detalhes nítidos
- Em situações em que uma luz próxima a uma fonte pontual incide sobre uma parede para criar um fundo natural, o fundo precisa ter textura suficiente sem desviar a atenção do assunto
- Exemplos de compressão WebP frequentemente mostram cenas nítidas, com grande profundidade de campo e muitos detalhes de alta frequência, mas essas cenas têm baixa probabilidade de posterização e não expõem bem as fraquezas do algoritmo
- Falta de nitidez não necessariamente arruína uma foto, mas uma vinheta suave se quebrar em degraus é um dano difícil de aceitar
Design do formato e problemas de cor
- WebP usa formato RGB ou RGBalpha, portanto não permite salvar imagens em preto e branco como imagens em tons de cinza de canal único
- A posterização observada no teste piorou com anéis magenta e verdes, interpretados como deslocamentos de cor causados por subamostragem de croma
- Se fosse possível salvar um formato puramente preto e branco em canal único, seria possível não criar deslocamentos adicionais de croma
- AVIF resolveu essa parte, mas considera-se que levará pelo menos 10 anos até que isso se torne amplamente viável na prática técnica
Medidas para preservar a qualidade da imagem
- Para sites em que a imagem é importante, especialmente portfólios de artistas visuais, considera-se melhor manter JPEG qualidade 90 ou, no mínimo, 85
- Para proteger gradientes suaves, recomenda-se sempre adicionar dithering ou ruído muito leve à imagem
- É melhor não converter JPEGs existentes para WebP; a exceção é apenas quando danos no nível dos exemplos anteriores forem aceitáveis
- Para aumentar a velocidade de carregamento e a responsividade percebida, é mais seguro usar CDN, tamanhos de imagem responsivos e lazy loading de imagens do que converter formatos
- O modelo SaaS que converte em servidores externos gera custos, não revela os coeficientes reais de qualidade e pode causar erros de conexão HTTP em ambientes WordPress reforçados por plugins de segurança, entre outros casos
- É melhor executar ImageMagick ou GraphicsMagick diretamente no servidor, e recomenda-se uma abordagem que use diretamente o programa do servidor, não uma interface PHP
- Se desenvolvedores técnicos e projetistas de algoritmos de imagem impuserem escolhas de formato apenas com métricas médias, podem causar perda de tempo e dinheiro para artistas reais
1 comentários
Opiniões no Hacker News
Vi o mesmo problema no WebP, então voltei em grande parte para JPG/PNG; uso jpg para fotos e png para imagens de UI.
O verdadeiro problema parece ser que muita gente não percebe a diferença, talvez porque, nos últimos 10 anos, os monitores de desktop tenham ficado numa zona esquecida, sem inovação. Metade das pessoas aqui provavelmente está vendo as imagens de exemplo em um LCD 1920x1080 de por volta de 2012, e isso também faz parte do problema.
Curiosamente, telas pequenas como as de celulares e telas grandes como TVs 4K passaram a ter excelente densidade de pixels em relação à distância de visualização, mas painéis de 20 a 40 polegadas continuam presos ao nível de meados dos anos 2000.
Também acho que teria sido melhor se o autor tivesse usado uma foto de exemplo com fundo claro ou mudado o fundo do artigo para preto. Imagens pretas sobre fundo branco dificultam ver o problema, porque os olhos têm dificuldade para se adaptar; em um fundo escuro, a diferença fica muito mais fácil de perceber.
Por isso, é difícil ver a qualidade da tela como o problema central. Pode ser uma questão de driver ou de filtros de pós-processamento, ou simplesmente nem todo mundo tem olho para esse tipo de coisa.
Se você se interessa por processamento de imagens, pela experiência acaba percebendo esses detalhes. O autor claramente tem mais experiência do que eu, e enxergar esse tipo de detalhe talvez faça parte do trabalho dele. É bem provável que ele consiga identificar o problema até em um monitor ruim e dizer exatamente de que maneira esse monitor é ruim.
Os exemplos são ruins. Se quer mostrar algo, deveria ampliar uma captura de tela para mostrar os artefatos.
Ao trocar PNG por WebP, o “lossless” de “lossless WebP” não é realmente sem perdas?
Como referência, se você converter um PNG para WebP sem perdas, depois descompactá-lo de volta para PNG e converter esse PNG novamente para WebP, obtém exatamente o mesmo arquivo WebP sem perdas. Seja codificando diretamente a partir do PNG, seja a partir do mesmo PNG “crushed” por um otimizador de PNG, o WebP resultante é igual.
É bom que existam pessoas que realmente se importem com o melhor resultado possível, mas acho que a maioria nem vai perceber nem se importar.
Abri as duas primeiras fotos em abas separadas e alternando rapidamente entre elas, e não vi nenhuma diferença. Testei em dois monitores diferentes, no Chrome e no Firefox, e as últimas fotos do homem também pareciam iguais
Correção: na última comparação, o WebP tinha sido incluído duas vezes e o link estava errado. O jpg está aqui, mas mesmo assim não vejo diferença
https://eng.aurelienpierre.com/wp-content/uploads/sites/8/20...
Correção: para ver a verdade, é preciso clicar de fato e ver a imagem em tamanho completo. As imagens incorporadas no texto tinham artefatos de compressão bem fortes, até mesmo as marcadas como sem perdas
Então o WebP sem perdas em tamanho completo https://eng.aurelienpierre.com/wp-content/uploads/sites/8/20... parece bom, mas a versão incorporada da mesma imagem, https://eng.aurelienpierre.com/wp-content/uploads/sites/8/20..., parece horrível
Correção 2: a diferença entre os três abaixo é bem clara
https://eng.aurelienpierre.com/wp-content/uploads/sites/8/20... lossy-noise.jpg (JPEG de 216 kB)
https://eng.aurelienpierre.com/wp-content/uploads/sites/8/20... (WebP de 150 kB)
https://eng.aurelienpierre.com/wp-content/uploads/sites/8/20... (WebP de 301 kB)
Nos dois exemplos em WebP, até mesmo na versão de 301 kB, a posterização é claramente visível
Fico me perguntando se não há algum problema com o encoder WebP usado ou com as configurações
Correção 3: o gama do monitor e o perfil de cores podem afetar a visibilidade da posterização em gradientes
https://eng.aurelienpierre.com/wp-content/uploads/sites/8/20...
https://eng.aurelienpierre.com/wp-content/uploads/sites/8/20...
Mas, se você não liga para fotografia, talvez não se importe o suficiente para notar
Diferenças assim não são pequenas. Quem não as vê, ou só consegue vê-las olhando com atenção, precisa saber que, para muita gente, essa diferença é imediatamente visível
Na segunda imagem, abri as versões jpeg 90 [1] e webp 90 [2], e, ao comparar as duas, há um problema claro de banding à direita do pescoço. A faixa mais escura em volta da imagem inteira é um pouco menos visível, mas ainda aparece quando você sabe onde olhar
Se comparar o jpeg 90 com webp lossless, jpeg 100 ou jpeg 95, também dá para ver um banding muito sutil do jpeg 90 à direita do pescoço. Mas, sem zoom, é muito difícil perceber
[1] https://eng.aurelienpierre.com/wp-content/uploads/sites/8/20...
[2] https://eng.aurelienpierre.com/wp-content/uploads/sites/8/20...
Na minha opinião, a pior e mais fácil de distinguir desvantagem do WebP é a subamostragem de croma 4:2:0 obrigatória. Em muitas imagens com cores vivas, a perda de cor e de brilho fica evidente mesmo sem um olhar profissional
Na comparação [1], é nítido que o balão no canto superior direito perdeu o vermelho vivo; na comparação [2], a arte de neon azul-claro no centro perdeu brilho
[1] https://storage.googleapis.com/demos.webmproject.org/webp/cm...
[2] https://storage.googleapis.com/demos.webmproject.org/webp/cm...
Fico curioso para saber por que este comando, ao converter de jpg > webp, gera um azul-claro desbotado, enquanto as outras cores saem razoavelmente bem
cwebp -pass 10 -m 6 -nostrong -sharp_yuv -quiet -q 60 -sharpness 2 $1 -oEste texto não abordou o maior problema que percebo no WebP. A inconveniência desse formato fora do navegador supera a pequena economia de tamanho
Existem formatos melhores. Há formatos inspirados em codecs de vídeo, como os que podem vir de HEIF, AVIF e H.266, ou também JPEG XL; o WebP parece um meio-termo sem vantagens suficientes
Muita gente discute se dá para ver banding ou não em imagens WEBP próximas das melhores condições, mas as imagens WEBP do mundo real geralmente parecem horríveis. Só recentemente comecei a perceber isso de verdade
Claro que agora dá para “limpar” a imagem com um processo de upscaling generativo, e é bem irônico gastar tanta eletricidade porque alguém quis economizar 45 KB
Isso também me lembra a época em que GIFs eram convertidos para JPEG. Cerca de 25 anos atrás havia muitas capturas de tela limpas em GIF, para as quais 256 cores eram suficientes, mas o JPEG as estragava
O Google diz aos desenvolvedores para usarem WEBP, mas não tem problema nenhum em servir petabytes de anúncios em vídeo que ninguém quer ver
Se a ideia é “pode parecer bom aos olhos de leigos, mas não aos de um fotógrafo”, então acho que deveria haver exemplos melhores para mostrar a “leigos” por que WebP é ruim e justificar o texto e o tom
Talvez por eu estar vendo no Android, todas as fotos parecem ter a mesma qualidade
E, se você está produzindo fotos para “olhos especialistas”, não basta não usar uma tecnologia que não atende a olhos especialistas? Ou não terceirizar esse tipo de decisão?
Vendo os comentários nesta thread em que as pessoas falam bobagem e afirmam com confiança que não há diferença, a frustração dele parece justificada. Tudo bem não ver diferença nas primeiras imagens, mas isso não significa que você deva afirmar com confiança que sabe mais que o autor, nem projetar codecs de imagem
Dava para ver mesmo sem abrir em tela cheia. É só olhar para o homem fazendo careta e observar a borda da camisa perto do ombro
Na foto de baixa qualidade, aparece um vazamento de luz ao redor do ombro, como se fosse contraluz
Na foto de boa qualidade, o gradiente é suave. Não há esse vazamento de luz tipo contraluz ao redor do ombro; parece apenas um fundo com gradiente suave
Para deixar claro, não sou fotógrafo; sou engenheiro DevOps. A última vez que usei JavaScript profissionalmente foi há pelo menos 11 anos
Dá para ver com bastante facilidade
[1] https://news.ycombinator.com/item?id=38653224
A ideia básica inteira deste post parece não ser passar por uma validação fundamental como comparação entre formatos, mas gerar mais reclamação e cliques
Para dar um pouco de contexto, Aurelien Pierre é conhecido como um dos principais contribuidores do Darktable. O Darktable é uma ferramenta open source de revelação/catalogação RAW, ou seja, algo como um Adobe Lightroom open source
Ele é conhecido por ter opiniões fortes sobre a forma correta de fazer as coisas, às vezes até de maneira áspera, e chegou a fazer um fork do Darktable em seu próprio projeto chamado Ansel. Houve uma discussão antiga no HN também https://news.ycombinator.com/item?id=38390914
Se você se preocupa com a qualidade de imagens de arquivo, eu não recomprimiria imagens antigas em um novo formato, a menos que pudesse fazer isso a partir dos originais não comprimidos. Reencodar a partir de uma fonte com compressão com perdas piora a qualidade. Armazenamento é barato e continua ficando mais barato
O que faz sentido é escolher configurações seguras ao comprimir fotos novas em um novo formato
Nesse contexto, o Google vem bloqueando o JPEG XL ao remover o suporte a JPEG XL do Chrome e se recusar a restaurá-lo, alegando que ele não oferece “benefícios incrementais” suficientes em comparação com formatos existentes como WebP
-q100, enquanto o JPEG é visualmente transparente até em-q90Parece que o autor focou no lugar errado. Ele se concentrou nas diferenças entre formatos, mas na verdade deveria ter se concentrado no método de compressão. Cada programa de processamento de imagem produz resultados diferentes de compressão, mesmo usando o mesmo número, por exemplo “80”
Para fazer uma comparação realmente significativa, seria preciso testar imagens variadas: não só uma foto de estúdio em preto e branco de uma pessoa com fundo em gradiente suave, mas também imagens coloridas com fundos complexos. Também seria preciso considerar vários programas, como imagemagick, graphicsMagick, sharp, photoshop e diversos serviços de nuvem
Outro problema é o caso de uso. Se um fotógrafo profissional quer enviar uma foto em tamanho integral e na qualidade máxima, talvez seja melhor simplesmente não comprimir, para preservar totalmente o resultado da criação/edição. Mas esse caso de uso não é o caso médio de um site exibindo imagens em tamanho razoável e qualidade razoável
Em muitas situações, uma imagem muito menor vale a pena mesmo com compressão mais forte e, em muitas imagens, a compressão não será tão perceptível quanto em uma foto profissional de estúdio em resolução total com um grande fundo em gradiente
Pessoalmente, não vejo uma diferença significativa, então meus olhos certamente parecem ser “olhos de leigo”
O que o autor está reclamando são os artefatos no fundo da imagem
É curioso como a percepção varia tanto de pessoa para pessoa
Os gradientes do WebP muitas vezes parecem frames parados de vídeo. A subamostragem de croma reduz a densidade das aproximações de luminância disponíveis e, quanto mais forte ela é aplicada, piores ficam os gradientes
Detalhes de alto contraste e alta frequência não são muito afetados, mas gradientes podem ser gravemente prejudicados
Croma significa cor, e a subamostragem de cor é usada para não remover informação do canal de luminância, que é mais importante