ファイル圧縮の仕組み
ソフトウェアエンジニアは、多くのデータを小さなスペースに収める新しい方法を常に開発してきました。私たちのハードドライブが小さいとき、それは本当でした、そしてインターネットの出現はちょうどそれをより重要にしました。ファイル圧縮は、私たちをつなぐ上で大きな役割を果たし、私たちがより少ないデータを送信できるようにするので、より高速なダウンロードが可能になり、より多くの接続をビジーなネットワークに合わせることができます。.
だからそれはどのように動作しますか?
その質問に答えるには、確かにこの記事で取り上げることができる以上に、非常に複雑な数学を説明する必要がありますが、基本を理解するために数学的にどのように機能するかを正確に理解する必要はありません。.
テキストを圧縮するための最も一般的なライブラリは、非常に高い圧縮率を達成するために両方を同時に使用する2つの圧縮アルゴリズムに依存しています。これら2つのアルゴリズムは、「LZ77」と「ハフマンコーディング」です。ハフマンコーディングは非常に複雑であるため、ここでは詳しく説明しません。主に、それは短い割り当てにいくつかの空想の数学を使用しています バイナリコード 個々の文字に合わせて、ファイルサイズを縮小します。あなたがそれについてもっと知りたいならば、コードがどのように働くかに関するこの記事、またはComputerphileによるこの説明者をチェックしてください.
一方、LZ77は比較的単純なので、ここで説明します。重複する単語を削除し、その単語を表す小さな「キー」に置き換えます。.
たとえば、この短いテキストを見てください。
LZ77アルゴリズムはこのテキストを見て、「howtogeek」を3回繰り返すことを理解し、それを次のように変更します。
それから、テキストを読み戻したいときは、(h)のすべてのインスタンスを「howtogeek」に置き換えて、元のフレーズに戻します。.
私達はこのように「ロスレス」圧縮と呼びます - あなたが入れたデータはあなたが出したデータと同じです。何も失われない.
実際には、LZ77はキーのリストを使用しませんが、代わりに2番目と3番目の出現箇所をメモリ内のリンクに置き換えます。
だから今、それが(h)に到達するとき、それは“ howtogeek”を振り返って代わりにそれを読むでしょう.
あなたがより詳細な説明に興味があるなら、Computerphileからのこのビデオはかなり役に立ちます.
今、これは理想的な例です。実際には、ほとんどのテキストはほんの数文字のように小さいキーで圧縮されています。たとえば、「the」という単語が「there」、「their」、「then」のように表示されていても圧縮されます。テキストを繰り返し使用すると、圧縮率がおかしくなります。 「howtogeek」という単語を含むこのテキストファイルを100回繰り返します。元のテキストファイルのサイズは3キロバイトです。ただし、圧縮時には158バイトしかかかりません。それはほぼ95%の圧縮です.
これは明らかに、同じ単語を何度も繰り返していたので、これはかなり極端な例です。一般的なやり方では、たいていはテキストであるファイルにZIPのような圧縮フォーマットを使用しておよそ30-40%の圧縮を得るでしょう.
ところで、このLZ77アルゴリズムは、テキストだけでなくすべてのバイナリデータに適用されますが、テキストは一般に、ほとんどの言語で使用されている単語の数が多いため圧縮が容易です。中国語のような言語は、英語よりも圧縮するのが少し難しいかもしれません、例えば.
画像とビデオの圧縮方法?
ビデオとオーディオの圧縮方法はまったく異なります。あなたがロスレス圧縮をすることができ、データが失われることがないテキストとは異なり、私たちはあなたがいくらかのデータを失う“ロスのある圧縮”と呼ばれるものを持っています。圧縮するほど、失われるデータが増えます。.
これが、人々が何度もアップロード、共有、およびスクリーンショットを撮ったことのあるひどい見栄えのするJPEGにつながるものです。画像が圧縮されるたびに、それはいくつかのデータを失います.
これが一例です。これは私が撮ったスクリーンショットで、まったく圧縮されていません。.
それから私はそのスクリーンショットを撮って、それを低品質のJPEGとしてエクスポートするたびに、Photoshopで何度も実行しました。これが結果です.
かなりひどいね?
まあ、これは最悪の場合のシナリオで、毎回0%のJPEG品質でエクスポートします。比較のために、ここに50%の品質のJPEGを示します。これは、拡大してよく見ない限り、ソースPNG画像とほとんど見分けがつかないものです。.
この画像のPNGサイズは200 KBですが、この50%品質のJPEGはわずか28 KBです。.
では、どのようにしてそれほど多くのスペースを節約するのでしょうか。さて、JPEGアルゴリズムは工学の偉業です。ほとんどの画像は数字のリストを格納しており、各数字は1ピクセルを表しています。.
JPEGはこれのどれもしません。代わりに、離散コサイン変換と呼ばれるものを使用して画像を保存します。これは、さまざまな強度で加算された正弦波の集まりです。それは64の異なる方程式を使いますが、これらのほとんどは慣れません。これが、Photoshopや他の画像アプリのJPEG用の高品質スライダーが何をするかということです。その後、アプリはハフマンエンコーディングを使用してファイルサイズをさらに縮小します。.
これはJPEGに非常に高い圧縮率を与え、品質によっては数メガバイトから数キロバイトまでのファイルを減らすことができます。もちろん、使いすぎると、結局次のようになります。
そのイメージはひどいです。しかし、少量のJPEG圧縮はファイルサイズに大きな影響を与える可能性があり、これはJPEGをWebサイトでの画像圧縮に非常に役立ちます。あなたがオンラインで見るほとんどの写真はダウンロード時間を節約するために圧縮されています、特に貧弱なデータ接続を持つモバイルユーザーのために。実際、How-To Geek上のすべての画像はページの読み込みを早くするために圧縮されています。.
ビデオ圧縮
ビデオは画像とは少し違った働きをします。あなたは彼らがただJPEGを使用してビデオの各フレームを圧縮すると思うだろう、そして彼らは確かにそうする、しかしビデオのためのより良い方法がある.
「フレーム間圧縮」と呼ばれるものを使用します。これは、各フレーム間の変化を計算し、それらの変化のみを格納します。そのため、たとえば、ビデオで数秒かかる比較的静止したショットがある場合、圧縮アルゴリズムでは変化しないすべてのものをシーンに格納する必要がないため、多くのスペースが節約されます。フレーム間圧縮は、デジタルテレビとWebビデオを使用する主な理由です。それがなければ、ビデオはYouTubeがローンチした2005年の平均ハードドライブサイズを超える数百ギガバイトになるでしょう。.
また、フレーム間圧縮はほとんど静止しているビデオで最もよく機能するので、紙吹雪がビデオ品質を台無しにする理由はここにあります.
注:GIFはこれを行わないので、アニメーションGIFは非常に短くて小さいことが多いのですが、それでもかなり大きいファイルサイズを持ちます。.
ビデオについてもう1つ注意しなければならないのは、ビットレート(1秒間に許可されるデータ量)です。たとえば、ビットレートが200 kb / sの場合、ビデオはかなり悪くなります。ビットレートが上がるにつれて品質は上がりますが、1秒あたり数メガバイトを超えると、収益は減少します.
これはクラゲのビデオから撮影したズームフレームです。左側のものは3Mb / s、右側のものは100Mb / sです。.
ファイルサイズは30倍になりますが、品質はそれほど向上しません。一般的に、YouTubeのビデオはあなたの接続にもよりますが2-10Mb / s前後になるでしょう。.
このデモは実際のビデオでうまく機能するので、自分で試してみる場合は、ここで使用したのと同じビットレートのテストビデオをダウンロードできます。.
オーディオ圧縮
音声圧縮は、テキストおよび画像の圧縮と非常によく似た働きをします。あなたが見ることができない画像からJPEGが細部を取り除くところでは、音声圧縮は音のために同じことをします。実際のギターがはるかに大きい場合は、ギターのしわになる音が弦にかかるのを聞く必要はないかもしれません。.
また、MP3では、ローエンドの48および96 kbps(ローエンド)から128および240kbps(かなり良い)から320kbps(ハイエンドのオーディオ)までのビットレートを使用しています。と耳).
オーディオ用のロスレス圧縮コーデックもあります。主なものはFLACで、LZ77エンコーディングを使用して完全にロスレスのオーディオを配信します。 FLACの完璧なオーディオ品質を誓う人もいますが、MP3が普及しているため、ほとんどの人は違いを見分けることができないか、気にしないようです.