Pagina inicial » como » Como funciona a compactação de arquivos?

    Como funciona a compactação de arquivos?

    Os engenheiros de software sempre desenvolveram novas maneiras de ajustar muitos dados em um espaço pequeno. 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”. A codificação de Huffman é bem complicada, e não entraremos em detalhes sobre isso aqui. Primeiramente, ele usa um pouco de matemática sofisticada para atribuir códigos binários para letras individuais, encolhendo tamanhos de arquivo no processo. Se você quiser aprender mais sobre isso, confira este artigo sobre como o código funciona, ou este explicador da Computerphile..

    LZ77, por outro lado, é relativamente simples e é sobre isso que estaremos falando aqui. 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:

    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 perda" - 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 que.

    Se você estiver interessado em uma explicação mais detalhada, este vídeo do 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, leva apenas 158 bytes. Isso é quase 95% de compressão.

    Agora, obviamente, esse é um exemplo bastante extremo, já que a mesma palavra repetia várias vezes. Na prática geral, você provavelmente obterá cerca de 30 a 40% de compactação 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 a 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 funciona a compactação de imagens e vídeos?

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

    Eu peguei essa captura de tela e a executei várias vezes no Photoshop, cada vez exportando-a como um JPEG de baixa qualidade. Aqui está o resultado.

    Parece muito ruim, certo?

    Bem, este é apenas um cenário de pior caso, exportando com qualidade JPEG de 0% a cada vez. Para fins de comparação, aqui está um JPEG de qualidade de 50%, que é quase indistinguível da imagem PNG de origem, a menos que você a exploda e veja de perto.

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

    Então, como economizar tanto 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, 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 - escolher 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 tempo 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.

    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.

    Usamos algo chamado "compactação interframe", que calcula as alterações entre cada quadro e armazena apenas essas. Então, por exemplo, se você tem uma tomada relativamente lenta que ocupa vários segundos em um vídeo, muito espaço é salvo porque o algoritmo de compactação não precisa armazenar todas as coisas na 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 lançou.

    Além disso, como a compactação interframe funciona melhor com vídeos predominantemente fixos, é por isso que os confetes estragam 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 permitidos em 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 ampliado 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.

    Essa demonstração funciona melhor com o vídeo real, por isso, se você quiser verificá-la 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 na corda se a guitarra real estiver muito, muito mais alta.

    MP3 também usa taxa de bits, variando de 48 e 96 kbps (low end) a 128 e 240kbps (muito boa) a 320kbps (áudio high-end), e você provavelmente só ouvirá a diferença com fones excepcionalmente bons ( e ouvidos).

    Há também codecs de compressã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 pela qualidade de áudio perfeita da FLAC, mas com a prevalência de MP3, parece que a maioria das pessoas não pode dizer ou não se importa com a diferença.