Bhinish Dhiman
Vídeo para GIF: quantos bytes por pixel por quadro, medido
Traduzido do original em inglês. Ler o original
Com o codificador que está por trás da nossa ferramenta, 50 quadros em 480 × 270 custaram 0.644 bytes por pixel por quadro numa foto em movimento (4.17 MB) e 0.111 numa gravação de interface com rolagem (716 KB). Em H.264 com CRF 23, ficaram com 78 KB e 132 KB: o GIF é 53 e 5.4 vezes maior. Uma paleta de 16 cores reduziu a foto pela metade.
Nossa ferramenta de vídeo para GIF estima o tamanho do resultado com uma constante de 0.45 bytes por pixel por quadro e avisa que o número pode errar por um fator de dois, para mais ou para menos. Medimos o tamanho do erro, e em que tipo de conteúdo.
A unidade
Bytes por pixel por quadro é o tamanho de um GIF dividido pela largura, pela altura e pelo número de quadros. Essa medida isola aquilo em que o GIF é ruim (guardar cada quadro como uma imagem completa de 8 bits comprimida com LZW, sem nenhuma referência ao quadro anterior) das escolhas que apenas mudam a escala. Cortar a largura pela metade reduz o arquivo a um quarto, seja qual for o valor desse número; o número em si é decidido pela imagem.
A medição
Dois clipes de quatro segundos, ambos decodificados em 50 quadros de 480 × 270 a 12.5 quadros por segundo: uma foto com panorâmica e zoom lentos, de modo que cada quadro difere do anterior, e uma gravação de tela do Chromium mostrando a rolagem de duas páginas deste site. Cada conjunto de quadros foi codificado no Chromium headless com o modern-gif 2.1.0, o codificador por trás da ferramenta, em cinco tamanhos de paleta, com e sem pontilhamento Floyd–Steinberg. Os mesmos 50 quadros também foram codificados com o FFmpeg 6.0 em H.264 com CRF 23 e CRF 18, e em VP9 com CRF 33. Teste feito em 1º de outubro de 2026.
| Paleta | Foto em movimento | Bytes por pixel por quadro | Gravação de tela | Bytes por pixel por quadro |
|---|---|---|---|---|
| 255 cores, com pontilhamento | 4 171 930 B | 0.644 | 716 151 B | 0.111 |
| 255 cores, sem pontilhamento | 4 188 639 B | 0.646 | 685 764 B | 0.106 |
| 128 cores, com pontilhamento | 3 674 083 B | 0.567 | 685 507 B | 0.106 |
| 64 cores, com pontilhamento | 3 115 969 B | 0.481 | 637 659 B | 0.098 |
| 32 cores, com pontilhamento | 2 569 888 B | 0.397 | 549 810 B | 0.085 |
| 16 cores, com pontilhamento | 2 010 333 B | 0.310 | 506 418 B | 0.078 |
A primeira linha é o que a ferramenta entrega, já que ela codifica com 255 cores e pontilhamento ativado. O codificador de paleta do próprio FFmpeg gerou 3 670 375 bytes e 726 687 bytes para as mesmas duas entradas com 256 cores, uma diferença de até 12% em relação ao modern-gif na foto e de 1.5% na gravação, então os números descrevem o formato, e não uma biblioteca específica.
Os mesmos quadros como vídeo
| Codificação | Foto em movimento | Gravação de tela |
|---|---|---|
| GIF, 255 cores, com pontilhamento | 4 171 930 B | 716 151 B |
| H.264, CRF 18 | 178 684 B | 179 566 B |
| H.264, CRF 23 | 78 138 B | 131 975 B |
| VP9, CRF 33 | 39 613 B | 105 788 B |
“Um GIF tem cerca de dez vezes o tamanho do MP4” é o número que costuma circular. Na foto, foram 53 vezes com CRF 23, 23 vezes mesmo com CRF 18 e 105 vezes contra o VP9. Na gravação de tela, foram 5.4 vezes. A foto é o caso em que os codecs de vídeo dão o seu melhor, porque a predição de movimento transforma uma imagem em panorâmica em poucas instruções por bloco; o GIF não tem nada parecido e paga por cada pixel em cada quadro.
O que a paleta compra
Passar de 255 para 16 cores reduziu a foto à metade e tirou 29% da gravação. É uma economia real, e a mais feia disponível: faixas visíveis em todo degradê e pele posterizada. Reduzir a largura de 480 para 340 economiza os mesmos 50% e aparece muito menos, e é por isso que nossa ferramenta oferece a largura e a taxa de quadros antes de qualquer outra coisa.
O pontilhamento custou quase nada em bytes (menos de 1% na foto, 4% na gravação) e de duas a quatro vezes o tempo de codificação. Com 16 cores, os arquivos com e sem pontilhamento tiveram exatamente o mesmo tamanho, byte a byte, nos dois clipes.
A estimativa contra a medição
Com 0.45 bytes por pixel por quadro, a ferramenta teria estimado 2.92 MB para os dois clipes. A foto ficou 43% acima disso e a gravação de tela, 75% abaixo. Uma única constante não consegue descrever um formato cuja proporção é definida inteiramente pelo conteúdo, e é por isso que a estimativa vem marcada como aproximada e o número real aparece ao lado dela depois. Medida num único quadro, a foto custou 0.668 bytes por pixel e a interface, 0.224; então, se você precisa saber antes, passar um quadro pelo codificador prevê melhor do que qualquer constante.
A versão curta
Para imagens fotográficas, espere cerca de 0.6 bytes por pixel por quadro e um arquivo cinquenta vezes maior que o MP4; para imagens de interface chapadas, cerca de 0.1 e cinco vezes. A largura é a alavanca; a paleta é o último recurso; e, passados alguns segundos, um GIF é um vídeo com a extensão errada.