同様の画像をロスレス圧縮しますか?

同様の画像をロスレス圧縮しますか?

写真ライブラリのサイズを小さくする必要があるため、当然圧縮したいと思っています。写真の多くは完全に同一ではありませんが、非常に似ています (同じシーンの連続ショット)。この事実を利用してこれらの画像を効果的に圧縮する圧縮アルゴリズムはありますか? 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 の「ソリッド アーカイブ」オプションを使用すると、ほぼ同じパフォーマンスが得られます。この方法で、個別の PNG ファイルとして保存するとそれぞれ約 900 KB になる 16 枚の類似のスクリーンショットを 2 MB のアーカイブに圧縮できました。このソリューションの利点は、一般的なファイル形式を使用するため、新しいソフトウェアをインストールしなくても機能することです。(残念ながら、より古く、さらに一般的なプログラムである GZIP と BZIP2 は、私の環境ではうまくいきませんでした。おそらく、BZIP2 のブロック サイズを 900 KB より大きく設定できないためでしょう。)

答え3

十分に大きなウィンドウがあれば、算術コーダを使用した Burrows-Wheeler 変換が理想的だと思います。BZIP2 を、写真の小さな連続と同じブロック サイズを使用するように構成するとどうなるでしょうか。速度は遅くなり、メモリも必要になりますが、圧縮率は急上昇するはずです。また、より大きなブロック サイズで LZMA を試したことはありますか。

答え4

私が見たことはありませんが、おそらく最も近いのは、類似した JPEG をいくつか取得して、それらを MJPEG ムービーにまとめることです。同様の目的で APNG またはアニメーション GIF を使用することもできます。

ただし、それがどの程度うまく機能するかはわかりません。すでに映画のスクリーンショットについて話しているようなので、それを映画ファイルに再パックするのは逆効果のように思えます。

おそらく、画面の元となったクリップがまだ残っている場合は、正確なフレームを抽出できるコマンド ライン ツールを見つけて、その一意の識別子をどこかのテキスト ファイルにコピーし、必要なときにいつでも簡単にフレームを再抽出できるようにするのがより良い方法でしょう。

関連情報