Compressão tripla e salvo apenas 1% no espaço?

2

Eu tenho tentado economizar espaço no meu servidor linux, e eu tinha uma pasta contendo, em subpastas, 22GB de imagens.

Então decidi comprimi-los.

Primeiro eu usei tar:

tar -zcf folder.tar folder 

Então gzip

gzip folder

E finalmente, por precaução, apenas no caso, bzip2

bzip2 folder

E depois de tudo isso, o total de todos os folder.tar.gz.bzip2 s chegou a 22GB! Com precisão mais fina, economiza 1% de espaço!

Eu fiz algo errado aqui? Eu esperaria muitas vezes mais do que uma economia de 1%!

Como eu posso compactar os arquivos?

    
por ACarter 10.04.2013 / 19:03

8 respostas

32

A taxa de compactação é muito dependente do que você está compactando. O motivo pelo qual o texto é compactado tão bem é porque ele nem mesmo começa a utilizar totalmente o intervalo total de números representáveis no mesmo espaço binário. Portanto, os formatos que fazem (por exemplo, arquivos compactados) podem armazenar as mesmas informações em menos espaço apenas pelo uso de todos esses números binários que não significam nada em codificações textuais e podem efetivamente representar progressões inteiras de caracteres em um único byte e obter uma boa taxa de compactação dessa maneira.

Se os arquivos já estiverem compactados, você normalmente não verá muita vantagem em compactá-los novamente. Se isso realmente economizou espaço adicional, é provavelmente uma indicação de que o primeiro algoritmo de compressão é uma droga. A julgar pela natureza da pergunta, presumo que muitos desses sejam arquivos de mídia e, como tal, já estejam compactados (embora com algoritmos que priorizem a velocidade de descompressão) e, portanto, você provavelmente não obterá muito deles. Tipo de sangue de um cenário de pedra: eles já são tão pequenos quanto poderiam ser feitos sem perder informação.

Se eu estou super preocupado com o espaço, eu apenas faço um "bzip2 -9" e chamo de bom. Eu já ouvi coisas boas sobre a razão no XZ. Eu mesmo não usei o XZ (além de descompactar o material de outras pessoas), mas ele deve ter uma relação melhor do que o bzip2, mas demore um pouco mais para compactar / descompactar.

    
por 10.04.2013 / 19:14
13

As tentativas de compactação falharam porque seus dados já estão altamente compactados e não há muito mais a ganhar, veja as outras respostas para obter explicações mais detalhadas. No entanto, se você concordar com a compactação lossy , ao contrário de lossless , como tentou anteriormente, poderá comprimir as imagens significativamente. Mas, como os dados são cortados, não podem ser desfeitos.

Veja um exemplo de comprimir novamente todas as imagens JPEG usando o imagemagick. Observe que isso substituirá seus arquivos.

find image_directory -type f -name "*.jpg" -exec mogrify -quality 75% {} \+
    
por 10.04.2013 / 19:58
10

Os formatos de imagem mais comuns já estão compactados (como jpg, png, gif), para que você não economize muito. 1% parece estar certo.

Adicionar mais compactação pode realmente tornar o resultado (ligeiramente) maior, porque o algoritmo de compactação não tem nenhum benefício em dados compactados e, em seguida, o formato (por exemplo, gzip) deve incluir informações de cabeçalho e / ou estrutura na saída. / p>

Desculpe! Se você estiver usando pngs, tente reduzir os arquivos usando pngcrush .

    
por 10.04.2013 / 19:12
6

1) Muitos formatos de imagem e vídeo já estão compactados, por isso é muito pouco a ganhar comprimindo-os com algum outro programa. Isto é especialmente verdadeiro para JPEG. Para imagens muito pequenas (em bytes) - ou melhor, um arquivo grande com muitas fotos pequenas - pode economizar um pouco, mas, em geral, os arquivos JPEG são tão compactados quanto possível.

2) Geralmente, é uma má ideia tentar compactar os mesmos dados repetidamente; seja compactando um tipo de arquivo já otimizado (por exemplo, gziping de um arquivo jpeg) ou aplicando um programa de compactação diferente ou igual ao mesmo arquivo em série (como você fez).

3) Quando você compacta um arquivo, às vezes você acaba com um arquivo maior do que o original (use o toque para criar um arquivo vazio e tente bzip2). Tem que ser assim; porque senão você seria capaz de pegar alguns dados, compactá-los de novo e de novo até que nada fosse deixado, mas um arquivo vazio, e ainda pudesse descompactar os dados originais mais tarde - mas isso soa lógico?

Tipicamente, ele compacta os dados já otimizados (como jpeg) ou já compactados, o que causará o crescimento dessa maneira, especialmente usando os mesmos programas de compactação nos dados várias vezes.

4) A melhor maneira de salvar dados é encontrar o programa de compressão que oferece o melhor ganho para qualquer dado que você tenha (já que o ganho pode variar dependendo dos dados); e use somente esse programa de compactação e use-o somente uma vez - mas com sua configuração melhor (geralmente mais lenta e mais exigente em recursos). Atualmente, o programa de compressão "best" (dando mais ganho) é provavelmente o xzip, embora o bzip2 não fique muito atrás. Certifique-se de selecionar a melhor taxa de compressão.

5) Para imagens (como jpeg) você costuma usar compressão "com perdas" - ie. você perde alguns dados (ao contrário de quando você usa programas como xzip, bzip2 e gzip que não são com perdas). Repetidamente, a compactação JPEG de uma imagem irá para tornar a imagem menor cada vez que for usada (ao contrário de usar algo como bzip2 duas vezes), mas irá soltar detalhes na imagem. Há também outras coisas que você pode fazer com as imagens - como alterar o tamanho (diminuindo) ou a resolução (menos pixels por polegada) - que o tornam "menor", mas novamente os dados serão perdidos.

Assim, se a qualidade das imagens não é tão importante e você realmente quer economizar espaço, usar um programa como o ImageMagic para processar em lote todas as imagens e torná-las menores, menos detalhadas e / ou usar maior compactação jpeg pode poupe muito espaço. Será perda, e suas fotos perderão detalhes.

6) Um pouco OT, mas você já viu coisas como diretórios de thumbnails - como ~ / .thumbnails? Se você tiver muitas imagens em seus diretórios e usar navegadores de arquivos com visualização de imagem, os minúsculos poderão conter lotes de miniaturas de imagens pelas quais você navegou em algum momento. Pessoalmente eu ganhei muito espaço em disco, apagando rotineiramente arquivos em vários esconderijos para miniaturas ...

    
por 11.04.2013 / 00:51
4

Formatos de imagem como png e jpeg já estão compactados. O ganho de compactá-los novamente é mínimo.

    
por 10.04.2013 / 19:12
4

Outro ponto que merece ser levantado: usar várias ferramentas / algoritmos de compactação pode realmente fazer com que o resultado final aumente de tamanho e se torne maior do que o necessário. Ou seja, se você comprimir 100GB a 10GB e tentar compactá-lo novamente, poderá acabar com ~ 15GB dependendo do que está sendo compactado e do que está sendo compactado.

Pessoalmente, eu nunca faço nada mais do que tar cjvf container.tar.bz2 /target simplesmente porque a quantidade de espaço em disco salva pela compactação dupla é minúscula.

    
por 10.04.2013 / 19:55
4

Como matemático, sinto que devo entrar em contato e elaborar um pouco. A questão se resume à compactação com perdas versus compactação sem perdas. A compactação de imagem como o jpeg é uma compactação com perdas e a compactação é sem perdas.

Perdido - dependendo da quantidade de informação que você está disposto a perder, você sempre pode "compactar" um arquivo para um tamanho menor, não importa o que aconteça, mas você perde permanentemente algumas informações e "descompacta" não terá o arquivo original. E sim com a compactação com perdas, você pode compactar de novo e de novo e descer para 1 byte, mas será completamente inútil.

Sem perdas - com isso você não perderá nenhuma informação e quando você "descomprimir" você terá o arquivo original exatamente. Mas aqui o trade off é que uma redução no tamanho não é garantida (facilmente comprovada usando o princípio do buraco dos pombos). Então, alguns arquivos diminuirão de tamanho. Alguns permanecerão os mesmos. E sim, alguns podem realmente aumentar de tamanho. Assim, os algoritmos sem perdas são projetados / otimizados para tipos específicos de dados, de modo que eles trabalham com (sem perdas) compactando um tipo de dado muito bem e absolutamente sugando os outros.

Aqui é onde a ignorância da ciência da computação entra em ação. Acho que o arquivo que você está usando está otimizado para texto, não para imagens, para que eles não ajudem nas imagens. As imagens já estão compactadas (com perdas) e, em seguida, compactá-las novamente não ajuda. Se você quiser (com perdas) compactá-los novamente, você pode arruinar as imagens e perder muita informação ... o que é como salvá-las como jpeg, com mais ênfase no tamanho do que na qualidade.

Não sei se existe um algoritmo de compactação sem perdas otimizado para imagens, mas isso pode ajudá-lo. Ou talvez exista um algoritmo otimizado para tipos específicos de imagens que você está tentando compactar como se fossem preto & branco, contém certos esquemas de cores, são sempre paisagens ou são retratos.

    
por 12.04.2013 / 09:10
1

As imagens, a menos que você esteja usando raw ou tiff, já possuem "compressão interna". tentar comprimi-los novamente provavelmente fará mais mal do que bem adicionando cabeçalhos extras.

    
por 10.04.2013 / 19:12