Como funciona a compactação de arquivos?

Índice:

Como funciona a compactação de arquivos?
Como funciona a compactação de arquivos?

Vídeo: Como funciona a compactação de arquivos?

Vídeo: Como funciona a compactação de arquivos?
Vídeo: Como ver o desempenho do seu computador sem precisar instalar nada #computador #pc #dicas #windows - YouTube 2024, Abril
Anonim
Os engenheiros de software sempre desenvolveram novas maneiras de ajustar muitos dados em um pequeno espaço. Era verdade quando nossos discos rígidos eram pequenos, e o advento da internet acabou tornando-a mais crítica. A compactação de arquivos tem um papel importante na conexão, permitindo que enviemos menos dados para baixo, para que possamos ter downloads mais rápidos e encaixar mais conexões em redes ocupadas.
Os engenheiros de software sempre desenvolveram novas maneiras de ajustar muitos dados em um pequeno espaço. Era verdade quando nossos discos rígidos eram pequenos, e o advento da internet acabou tornando-a mais crítica. A compactação de arquivos tem um papel importante na conexão, permitindo que enviemos menos dados para baixo, para que possamos ter downloads mais rápidos e encaixar mais conexões em redes ocupadas.

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:

O algoritmo LZ77 examinaria este texto, perceberia que ele repete “howtogeek” três vezes e o altera para isto:
O algoritmo LZ77 examinaria este texto, perceberia que ele repete “howtogeek” três vezes e o altera para isto:
Então, quando quiser ler o texto de volta, ele substituirá cada instância de (h) por “howtogeek”, trazendo-nos de volta à frase original.
Então, quando quiser ler o texto de volta, ele substituirá cada instância de (h) por “howtogeek”, trazendo-nos de volta à frase original.

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:

Então, agora, quando chegar a (h), ele irá olhar para trás para “howtogeek” e ler isso em vez disso.
Então, agora, quando chegar a (h), ele irá olhar para trás para “howtogeek” e ler isso em vez disso.

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.

Agora, obviamente, esse é um exemplo bastante extremo, já que a mesma palavra foi repetida várias vezes. No geral, você provavelmente terá uma compressão de 30 a 40% usando um formato de compactação como o ZIP em um arquivo que é principalmente texto.
Agora, obviamente, esse é um exemplo bastante extremo, já que a mesma palavra foi repetida várias vezes. No geral, você provavelmente terá uma compressão de 30 a 40% usando um formato de compactação como o ZIP em um arquivo que é principalmente texto.

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?

A compactação de vídeo e áudio funciona de maneira muito diferente. Ao contrário do texto em que você pode ter uma compactação sem perdas e nenhum dado é perdido, com as imagens, temos o que chamamos de "Compressão com perdas", onde você perde alguns dados. E quanto mais você comprimir, mais dados você perderá.
A compactação de vídeo e áudio funciona de maneira muito diferente. Ao contrário do texto em que você pode ter uma compactação sem perdas e nenhum dado é perdido, com as imagens, temos o que chamamos de "Compressão com perdas", onde você perde alguns dados. E quanto mais você comprimir, mais dados você perderá.

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.

Então peguei essa captura de tela e a executei no Photoshop várias vezes, cada vez exportando-a como um JPEG de baixa qualidade. Aqui está o resultado.
Então peguei essa captura de tela e a executei no Photoshop várias vezes, cada vez exportando-a como um JPEG de baixa qualidade. Aqui está o resultado.
Parece muito ruim, certo?
Parece muito ruim, certo?

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.

O PNG dessa imagem tinha 200 KB, mas esse JPEG de qualidade de 50% tem apenas 28 KB.
O PNG dessa imagem tinha 200 KB, mas esse JPEG de qualidade de 50% tem apenas 28 KB.

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:

Essa imagem é horrível.Mas pequenas quantidades de compactação JPEG podem ter um impacto significativo no tamanho do arquivo, e isso torna o JPEG muito útil para a compactação de imagens em sites. A maioria das fotos que você vê on-line é compactada para economizar nos tempos de download, especialmente para usuários móveis com conexões de dados ruins. Na verdade, todas as imagens do How-To Geek foram compactadas para tornar o carregamento da página mais rápido, e você provavelmente nunca percebeu isso.
Essa imagem é horrível.Mas pequenas quantidades de compactação JPEG podem ter um impacto significativo no tamanho do arquivo, e isso torna o JPEG muito útil para a compactação de imagens em sites. A maioria das fotos que você vê on-line é compactada para economizar nos tempos de download, especialmente para usuários móveis com conexões de dados ruins. Na verdade, todas as imagens do How-To Geek foram compactadas para tornar o carregamento da página mais rápido, e você provavelmente nunca percebeu isso.

Compressão de Vídeo

O vídeo funciona de maneira um pouco diferente das imagens. Você pensaria que eles apenas compactariam cada quadro de vídeo usando JPEG, e eles certamente fazem isso, mas há um método melhor para o vídeo.
O vídeo funciona de maneira um pouco diferente das imagens. Você pensaria que eles apenas compactariam cada quadro de vídeo usando JPEG, e eles certamente fazem isso, mas há um método melhor para o 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.

Um aumento de 30x no tamanho do arquivo, mas não muito aumento na qualidade. Geralmente, os vídeos do YouTube ficam em torno de 2 a 10 MB / s, dependendo da sua conexão, já que qualquer coisa mais provavelmente não será notada.
Um aumento de 30x no tamanho do arquivo, mas não muito aumento na qualidade. Geralmente, os vídeos do YouTube ficam em torno de 2 a 10 MB / s, dependendo da sua conexão, já que qualquer coisa mais provavelmente não será notada.

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

A compactação de áudio funciona de maneira muito semelhante à compressão de texto e imagem. Quando o JPEG remove detalhes de uma imagem que você não vê, a compactação de áudio faz o mesmo com os sons. Você pode não precisar ouvir o rangido da palheta da guitarra se a guitarra real for muito, muito mais alta.
A compactação de áudio funciona de maneira muito semelhante à compressão de texto e imagem. Quando o JPEG remove detalhes de uma imagem que você não vê, a compactação de áudio faz o mesmo com os sons. Você pode não precisar ouvir o rangido da palheta da guitarra se a guitarra real for muito, muito mais alta.

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.

Recomendado: