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.