Linuxサーバーのスペースを節約しようとしていますが、22GBの画像をサブフォルダーに含むフォルダーがありました。
そこで、圧縮することにしました。
最初にタールを使用しました:
tar -zcf folder.tar folder
次にgzip
gzip folder
そして最後に、念のため、bzip2
bzip2 folder
そしてその後、すべてのfolder.tar.gz.bzip2
sの合計はまだ22GBになりました!より細かい精度で、1%の省スペース!
ここで何か間違ったことをしましたか? 1%以上の節約を何倍も期待しています!
他にどのようにファイルを圧縮できますか?
圧縮率は非常に圧縮対象によって異なります。テキストが非常にうまく圧縮される理由は、同じバイナリ空間で表現可能なすべての範囲の数値を完全に利用し始めていないためです。したがって、そうするフォーマット(圧縮ファイルなど)は、テキストエンコーディングでは意味がなく、文字の進行全体を1バイトで効果的に表し、優れた圧縮率を得ることができるすべての2進数を使用するだけで、同じ情報をより少ないスペースに格納できます。そのように。
ファイルがすでに圧縮されている場合、通常、ファイルを再度圧縮することに大きな利点はありません。それが実際に追加のスペースを節約した場合、それはおそらく最初の圧縮アルゴリズムの種類が悪いことを示しています。質問の性質から判断すると、これらの多くはメディアファイルであり、(解凍の速度を優先するアルゴリズムではありますが)すでに圧縮されているため、おそらくそれらから多くを得ることができないと思います。石のシナリオからの一種の血:それらは情報を失うことなく作ることができるのと同じくらいすでに小さいです。
スペースが非常に心配な場合は、「bzip2 -9」を実行して、それを適切と呼びます。 XZの比率については良いことを聞いたことがあります。私は(他の人のものを解凍する以外に)XZを自分で使用したことはありませんが、bzip2よりも比率が高いはずですが、圧縮/解凍に少し時間がかかります。
データはすでに高度に圧縮されており、取得できるものがあまりないため、圧縮の試行は失敗しました。詳細な説明については、他の回答を参照してください。ただし、以前に試したようなlosslessとは対照的に、lossy圧縮に同意できる場合は、画像を大幅に圧縮できます。ただし、データが切り取られているため、元に戻すことはできません。
これは、imagemagickを使用してすべてのJPEG画像を再圧縮する例です。これによりファイルが上書きされることに注意してください。
find image_directory -type f -name "*.jpg" -exec mogrify -quality 75% {} \+
最も一般的な画像形式(jpg、png、gifなど)はすでに圧縮されているため、あまり節約できません。 1%はほぼ正しいと思います。
圧縮アルゴリズムは圧縮データにメリットがないため、圧縮を追加すると、実際には結果が(わずかに)大きくなる可能性があります。その場合、フォーマット(gzipなど)はヘッダーや構造情報を出力に追加する必要があります。
ごめんなさい! pngを使用している場合は、 pngcrush を使用してファイルを縮小してみてください。
1)多くの画像およびビデオ形式areはすでに圧縮されているため、他のプログラムで圧縮しても得られるものはほとんどありません。これは特にJPEGに当てはまります。非常に小さい画像(バイト単位)、または多くの小さい画像を含む大きなアーカイブの場合、保存するのにかなりの時間がかかる場合がありますが、一般に、JPEGファイルは可能な限り圧縮されています。
2)同じデータを繰り返し圧縮しようとするのは一般的に悪い考えです。すでに最適化されたファイルタイプを圧縮する場合(たとえば、jpegファイルをgzipで圧縮する場合)、または異なるまたは同じ圧縮プログラムを同じファイルにシリアルで適用する場合(これまでと同じように)。
3)ファイルを圧縮すると、元のファイルよりも大きなファイルになることがあります(touchを使用して空のファイルを作成し、bzip2で圧縮してみてください)。それはそのようでなければなりません。そうでなければ、いくつかのデータを取得できるため、nothingが空のファイルになるまで何度も圧縮し、still元のデータに解凍できるようにします。後で-しかし、それは論理的に聞こえますか?
これは通常、すでに最適化されている(jpegなど)またはすでに圧縮されているデータを圧縮するため、特にデータに対して同じ圧縮プログラムを数回使用すると、このように大きくなります。
4)データを保存する最良の方法は、データに応じて最良のゲインを提供する圧縮プログラムを見つけることです(ゲインはデータによって異なる場合があるため)。そして、その圧縮プログラムのみを使用し、それのみを使用します1回-しかし、それが最良の(多くの場合、最も遅く、最もリソースを必要とする)設定です。現在、「最良の」(最大のゲインを与える)圧縮プログラムはおそらくxzipですが、bzip2はそれほど遅れていません。最適な圧縮率を選択してください。
5)画像(jpegなど)の場合、「不可逆」圧縮を使用することがよくあります。一部のデータが失われます(損失のないxzip、bzip2、gzipなどのプログラムを使用する場合とは異なります)。画像を繰り返しJPEG圧縮するwillそのため、使用するたびに画像が小さくなります(bzip2のようなものを2回使用するのとは異なります)が、will画像の詳細が失われます。画像にできることは他にもあります。たとえば、サイズを変更する(小さくする)、解像度を変更する(1インチあたりのピクセル数を減らす)など、画像を「小さく」しますが、データは失われます。
したがって、画像の品質がそれほど重要ではなく、絶対にスペースを節約したい場合は、ImageMagicなどのプログラムを使用してすべての画像をバッチ処理し、画像を小さく、詳細度を下げたり、jpeg圧縮を高くしたりすると、大幅に節約できます。スペースの。 ただし、損失が発生し、写真の詳細が失われます。
6)少しOTですが、サムネイル-ディレクトリ-〜/.thumbnailsのようなものを見たことがありますか?ディレクトリに多くの写真があり、picture-previewでファイルブラウザを使用している場合、.thumbnailsには、ある時点で閲覧した写真のサムネイルのlotsが含まれている可能性があります。個人的には、サムネイルのさまざまな隠し場所の下にあるファイルを定期的に削除することで、多くのディスク容量を獲得しました...
png
やjpeg
などの画像形式はすでに圧縮されています。それらを再度圧縮することによる利益は最小限です。
提起する価値のあるもう1つのポイント:複数の圧縮ツール/アルゴリズムを使用すると、実際には最終結果のサイズが大きくなり、必要以上に大きくなる可能性があります。つまり、100GBを10GBまで圧縮してからもう一度圧縮しようとすると、圧縮対象と圧縮対象によっては、最大15GBになる可能性があります。
個人的には、二重圧縮によって節約されるディスク領域の量がごくわずかであるという理由だけで、tar cjvf container.tar.bz2 /target
以外のことは決してしません。
数学者として、私はチャイムを鳴らして少し詳しく説明する必要があると感じています。問題は、非可逆圧縮と可逆圧縮に要約されます。 jpegのような画像圧縮は不可逆圧縮であり、圧縮は可逆圧縮です。
非可逆-失う情報の量に応じて、ファイルをいつでも小さいサイズに「圧縮」できますが、トレードオフとして、一部の情報が永久に失われ、「解凍」するとファイルが失われます。元のファイル。そして、非可逆圧縮では、何度も何度も圧縮して1バイトまで下げることができますが、完全に役に立たなくなります。
ロスレス-これにより、情報がまったく失われることはなく、「解凍」すると元のファイルが正確に作成されます。ただし、ここでのトレードオフは、サイズの縮小が保証されないことです(鳩の巣原理を使用して簡単に証明できます)。そのため、一部のファイルのサイズが小さくなります。一部は同じままになります。そして、はい、実際にサイズが大きくなるものもあります。したがって、ロスレスアルゴリズムは、特定の種類のデータ用に設計/最適化されているため、ある種類のデータを(ロスレスで)圧縮するのに非常にうまく機能し、他のデータを完全に吸い込みます。
ここで私のコンピュータサイエンスの無知が始まります。使用しているファイルの圧縮は、画像ではなくテキスト用に最適化されているため、画像には役立ちません。画像はすでに(不可逆)圧縮されているため、再度圧縮しても効果はありません。それらを再び(不可逆)圧縮したい場合は、画像を台無しにして情報を失いすぎる可能性があります...これは、品質よりもサイズを重視してjpegとして保存するようなものです。
画像用に最適化されたロスレス圧縮アルゴリズムがあるかどうかはわかりませんが、それはあなたを助けるかもしれません。または、圧縮しようとしている特定の種類の画像(白黒、特定の配色を含む、常に横向き、すべて縦向きなど)に最適化されたアルゴリズムがあるかもしれません。
Rawまたはtiffを使用していない限り、画像にはすでに「組み込みの圧縮」があります。それらを再度圧縮しようとすると、ヘッダーを追加することで、害を及ぼす可能性が高くなります。