Compactando imagens semelhantes sem perdas?

Compactando imagens semelhantes sem perdas?

Preciso reduzir o tamanho da minha biblioteca de fotos, então naturalmente quero compactá-las. Muitos deles não são exatamente 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.

Responder1

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

  • 1.440 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 demorou 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 perdas jpg

Responder2

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 por pixel: salve as imagens em um formato descompactado como BMP (não PNG ou GIF) e depois TAR e comprima-as 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 7-Zip com a opção “arquivo sólido” para obter aproximadamente o mesmo desempenho. Dessa forma, pude compactar 16 capturas de tela semelhantes, que ocupavam cerca de 900 KB cada quando salvas como arquivos PNG separados, em um arquivo de 2 MB. A vantagem desta solução é que ela usa formatos de arquivo comuns, por isso funciona sem instalar 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 ser maior que 900 KB.)

Responder3

Eu imagino que a transformação do burrows-wheeler com um codificador aritmético seria ideal para isso, dada uma janela grande o suficiente. 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 consumirá mais memória, mas a taxa de compactação deverá disparar. E você já experimentou o LZMA com blocos maiores?

Responder4

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 se isso funcionaria bem, e parece que você já está falando sobre screencaps de filmes, então reempacotá-los em um arquivo de filme parece... contraproducente.

Talvez a melhor maneira, se você ainda tiver os clipes de onde vieram as telas, 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 então você sempre poderá extraia facilmente a moldura quando precisar.

informação relacionada