Então, como isso funciona?
Responder a essa pergunta envolveria explicar algumas contas muito complicadas, certamente mais do que podemos abordar neste artigo, mas você não precisa entender exatamente como funciona matematicamente para entender o básico.
As bibliotecas mais populares para compactar texto dependem de dois algoritmos de compactação, usando os dois ao mesmo tempo para obter taxas de compactação muito altas. Esses dois algoritmos são “LZ77” e “Huffman coding”. A codificação de Huffman é bastante complicada, e não entraremos em detalhes sobre isso aqui. Primeiramente, ele usa um pouco de matemática sofisticada para atribuircódigos binários para letras individuais, reduzindo o tamanho dos arquivos no processo. Se você quiser saber mais sobre isso, confira este artigo sobre como o código funciona, ou este explicador da Computerphile.
A LZ77, por outro lado, é relativamente simples e é sobre isso que vamos falar aqui. Ele procura remover palavras duplicadas e substituí-las por uma “chave” menor que representa a palavra.
Tome este pequeno pedaço de texto por exemplo:
Chamamos compactação como "sem perdas" - os dados inseridos são iguais aos dados que você recebe. Nada está perdido.
Na realidade, o LZ77 não usa uma lista de chaves, mas substitui a segunda e a terceira ocorrência por um link de volta na memória:
Se você estiver interessado em uma explicação mais detalhada, este vídeo da Computerphile é bastante útil.
Agora, este é um exemplo idealizado. Na realidade, a maioria dos textos é compactada com chaves tão pequenas quanto apenas alguns caracteres. Por exemplo, a palavra “the” seria comprimida mesmo quando aparecesse em palavras como “there”, “their” e “then”. Com o texto repetido, você pode obter algumas taxas de compressão malucas. Pegue este arquivo de texto com a palavra “howtogeek” repetida 100 vezes. O arquivo de texto original tem três kilobytes de tamanho. Quando comprimido, no entanto, ocupa apenas 158 bytes. Isso é quase 95% de compactação.
Este algoritmo LZ77 aplica-se a todos os dados binários, a propósito, e não apenas texto, embora o texto geralmente seja mais fácil de compactar devido ao número de palavras repetidas usadas pela maioria das linguagens. Uma língua como o chinês pode ser um pouco mais difícil de comprimir do que o inglês, por exemplo.
Como a imagem e a compactação de vídeo funcionam?
Isso é o que leva àqueles JPEGs de aparência horrível que as pessoas enviaram, compartilharam e fizeram capturas de tela várias vezes. Cada vez que a imagem é comprimida, perde alguns dados.
Aqui está um exemplo. Esta é uma captura de tela que tirei e que não foi compactada.
Bem, este é apenas um cenário de pior caso, exportando com qualidade JPEG de 0% a cada vez. Para comparação, veja aqui um JPEG de qualidade de 50%, que é quase indistinguível da imagem PNG de origem, a menos que você a exploda e observe de perto.
Então, como economizar muito espaço? Bem, o algoritmo JPEG é uma façanha de engenharia. A maioria das imagens armazena uma lista de números, com cada número representando um único pixel.
JPEG não faz nada disso. Em vez disso, ele armazena imagens usando algo chamado Transformada Discreta de Cosseno, que é uma coleção de ondas senoidais somadas em diferentes intensidades. Ele usa 64 equações diferentes, mas a maioria delas não é usada. É isso que o controle deslizante de qualidade para JPEG no Photoshop e em outros aplicativos de imagem faz - escolha quantas equações usar. Os aplicativos então usam a codificação Huffman para reduzir ainda mais o tamanho do arquivo.
Isso dá aos JPEGs uma alta taxa de compactação insana, o que pode reduzir um arquivo com vários megabytes para alguns kilobytes, dependendo da qualidade. Claro, se você usar muito, você acaba com isso:
Compressão de Vídeo
Usamos algo chamado "compactação interframe", que calcula as alterações entre cada quadro e armazena apenas essas. Por exemplo, se você tiver uma captura relativamente lenta que ocupe vários segundos em um vídeo, muito espaço será salvo porque o algoritmo de compactação não precisa armazenar todas as coisas da cena que não mudam. Compressão interframe é a principal razão pela qual temos TV digital e vídeo na web. Sem isso, os vídeos teriam centenas de gigabytes, mais do que o tamanho médio dos discos rígidos em 2005, quando o YouTube foi lançado.
Além disso, como a compactação interframe funciona melhor com vídeos predominantemente fixos, é por isso que o confete destrói a qualidade do vídeo.
Observação: o GIF não faz isso, e é por isso que os GIFs animados costumam ser muito curtos e pequenos, mas ainda têm um tamanho de arquivo muito grande.
Outra coisa a ter em mente sobre o vídeo é sua taxa de bits - a quantidade de dados permitida a cada segundo. Se sua taxa de bits for de 200 kb / s, por exemplo, seu vídeo ficará muito ruim. A qualidade aumenta à medida que a taxa de bits aumenta, mas depois de alguns megabytes por segundo, você obtém retornos decrescentes.
Este é um quadro com zoom tirado de um vídeo de uma água-viva. O da esquerda está a 3Mb / s, e o da direita é de 100Mb / s.
Essa demonstração funciona melhor com o vídeo real, portanto, se você quiser conferir por conta própria, pode fazer o download dos mesmos vídeos de teste de taxa de bits usados aqui.
Compressão de Áudio
O MP3 também usa taxa de bits, variando de 48 e 96 kbps (low end) a 128 e 240kbps (muito bom) a 320kbps (áudio high-end), e você provavelmente só ouvirá a diferença com fones excepcionalmente bons ( e ouvidos).
Há também codecs de compactação sem perdas para áudio - o principal deles é o FLAC - que usa a codificação LZ77 para fornecer áudio totalmente livre de perdas. Algumas pessoas juram que a qualidade de áudio perfeita da FLAC, mas com a prevalência de MP3, parece que a maioria das pessoas não sabe ou não se importa com a diferença.