我需要缩小照片库的大小,因此自然而然地想要压缩它们。其中许多照片并不完全相同,但仍然非常相似(同一场景的后续照片)。是否有任何压缩算法可以利用这一事实来有效压缩这些图像?7zip(LZMA)毫无用处。
答案1
你可以尝试帕克 8(fp8_v2.zip)。我刚刚在 1440 张类似的 PNG 图像上亲自尝试了此方法,然后在 111 张类似的 JPG 图像上再次尝试了此方法。结果如下。
- 1440 PNG 文件,28,631,615 字节 => 压缩后 2,058,653 字节
- 111 个 JPG 文件,15,003,820 字节 => 压缩后 489,096 字节
使用下列方法压缩 PNG 文件大约需要 8 分钟和 550 MB 内存:
fp8_v2.exe -7 images *.png
使用下列方法压缩 JPG 文件大约需要 5 分钟和 125 MB 内存:
fp8_v2.exe -5 images image12*.jpg
也可以看看:jpg 无损图像压缩测试
答案2
这是一个简单的解决方案,它不适用于照片,但如果有几张图像具有大面积的逐像素相同区域,则可能会有效:将图像保存为未打包的格式,例如 BMP(而不是 PNG 或 GIF),然后将它们 TAR 并使用像 XZ 这样的压缩器进行压缩,例如在 Linux 上使用类似
tar -c myDirectory | xz -9 >myDirectory.tar.xz
除了 TAR 和 XZ,还可以使用 7-Zip 的“固定存档”选项来获得大致相同的性能。这样,我可以将 16 张类似的截图(当保存为单独的 PNG 文件时,每张截图大约占用 900 KB)压缩成一个 2 MB 的存档。此解决方案的好处是它使用常见的文件格式,因此无需安装新软件即可使用。(不幸的是,较旧且更常见的程序 GZIP 和 BZIP2 对我来说效果不佳 — 可能是因为 BZIP2 的块大小不能配置为大于 900 KB。)
答案3
我认为,如果窗口足够大,使用算术编码器的 Burrows-Wheeler 变换将是理想的选择。如果您将 BZIP2 配置为使用与一小段照片相等的块大小,会发生什么?它会变慢并占用更多内存,但压缩率会大幅提升。您尝试过块大小更大的 LZMA 吗?
答案4
据我所知没有。最接近的做法可能是拍摄几张类似的 JPEG 并将它们放入 MJPEG 影片中。您也可以使用 APNG 或动画 GIF 来实现类似的目的。
不过,我不确定这样做效果如何,听起来你已经在谈论电影截图了,所以将它们重新打包成电影文件听起来……适得其反。
也许更好的方法是,如果您仍然有屏幕来源的剪辑,只需找到一个可以为您提取精确帧的命令行工具,将该唯一标识符复制到某个文本文件中,然后您就可以在需要时轻松地重新提取该帧。