Comprimir sem perdas imagens semelhantes?

10

Preciso reduzir o tamanho da minha biblioteca de fotos para que eu naturalmente queira compactá-las. Muitos deles não são completamente idênticos, mas ainda assim muito semelhantes (fotos subsequentes da mesma cena). Existe algum algoritmo de compactação que aproveite esse fato para compactar efetivamente essas imagens? 7zip (LZMA) é inútil.

Erik
fonte

Respostas:

11

Você pode tentar o Paq 8 (fp8_v2.zip). Eu tentei sozinho em 1440 imagens PNG semelhantes e novamente em 111 imagens JPG semelhantes. Aqui estão os resultados.

  • 1440 arquivos PNG, 28.631.615 bytes => 2.058.653 bytes compactados
  • 111 arquivos JPG, 15.003.820 bytes => 489.096 bytes compactados

A compactação dos arquivos PNG levou cerca de 8 minutos e 550 MB de memória ao usar:

fp8_v2.exe -7 images *.png

A compactação dos arquivos JPG levou cerca de 5 minutos e 125 MB de memória ao usar:

fp8_v2.exe -5 images image12*.jpg

Veja também: teste de compactação de imagem sem perda de jpg

jftuga
fonte
97% de compactação para os JPGs parece irrealista. Os números no teste de comparação que você vincula para dizer que a compactação é de cerca de 20%
OneSolitaryNoob
@OneSolitaryNoob Você esqueceu que os JPEGs são semelhantes? 110/111 = 99,1% de compactação esperada. O teste de comparação que ele vinculou é sobre compactar um único JPEG.
Navin
@ Navin é realmente improvável. Mesmo que pareçam quase idênticos, a maioria dos pixels será ligeiramente diferente.
OneSolitaryNoob
@OneSolitaryNoob Então, o que? Um segundo de vídeo (30 quadros) pode ser compactado para aproximadamente o mesmo tamanho que um único quadro. Contanto que a pequena diferença constitua uma pequena fração dos dados, você estará bem.
Navin
@ Navin isso é compactação com perdas, muitos detalhes sumiram, mas a maioria das pessoas não notará. Paq * é a compressão sem perdas
OneSolitaryNoob
1

Eu imaginaria que a transformação de burrows-wheeler com um codificador aritmético seria ideal para isso, dada uma janela suficientemente grande. O que acontece se você configurar o BZIP2 para usar um tamanho de bloco igual a uma pequena tiragem de fotos? Será mais lento e precisará de mais memória, mas a taxa de compressão deve disparar. E você já experimentou o LZMA com tamanhos de bloco maiores?

Peter Hanneman
fonte
1

Aqui está uma solução simples que não funciona para fotos, mas pode funcionar se houver várias imagens com grandes áreas idênticas pixel a pixel: salve as imagens em um formato descompactado, como BMP (não PNG ou GIF), depois TAR e compactá-las com um compressor decente como o XZ, por exemplo, no Linux com algo como

tar -c myDirectory | xz -9 >myDirectory.tar.xz

Em vez de TAR e XZ, pode-se usar o 7-Zip com a opção “solid archive” para obter aproximadamente o mesmo desempenho. Dessa maneira, eu pude compactar 16 capturas de tela semelhantes, com aproximadamente 900 KB cada, quando salvas como arquivos PNG separados, em um arquivo de 2 MB. O benefício desta solução é que ele usa formatos de arquivo comuns, portanto, funciona sem a instalação de um novo software. (Infelizmente, os programas mais antigos e ainda mais comuns GZIP e BZIP2 não fizeram um bom trabalho para mim - talvez porque o tamanho do bloco do BZIP2 não possa ser configurado para ter mais de 900 KB.)

Jaan
fonte
0

Não que eu tenha visto. Provavelmente, o mais próximo seria pegar vários JPEGs semelhantes e colocá-los em um filme MJPEG. Você também pode usar APNG ou GIFs animados para uma finalidade semelhante.

Não tenho certeza de como isso funcionaria bem, e parece que você já está falando sobre screencaps de filmes, então reembalá-los em um arquivo de filme parece ... contraproducente.

Talvez uma maneira melhor, se você ainda tiver os clipes de onde as telas vieram, seria simplesmente encontrar uma ferramenta de linha de comando que possa extrair o quadro exato para você, copiar esse identificador exclusivo em um arquivo de texto em algum lugar e, em seguida, você sempre poderá extraia facilmente o quadro quando você precisar.

afrazier
fonte
O GIF não é adequado para compactar fotos, e o GIF animado é ainda menor. Mesmo compactar fotos em um vídeo MJPEG não parece útil aos meus olhos, porque seria difícil restaurar imagens únicas.
Martin Martin
Eu não disse que era uma boa idéia ... :-) A idéia final era colocar as fotos em uma variante animada de seu formato original.
afrazier