TERM GUIDE · DIGITAL

圧縮

「圧縮」とは

圧縮とは、データの内容をできるだけ保ちながら、データ量を小さくすることです。

画像、音声、動画、文書、プログラムなどのデータは、そのまま保存すると大きな容量を必要とすることがあります。データを圧縮すれば、保存に必要な容量を減らしたり、ネットワークで送信するときの通信量を減らしたりできます。

圧縮されたデータを利用できる状態に戻すことを展開または伸張といいます。

圧縮方式は、大きく

  • 可逆圧縮
  • 非可逆圧縮

の二つに分けられます。

可逆圧縮

可逆圧縮は、圧縮したデータを展開したときに、圧縮前とまったく同じデータを復元できる圧縮方式です。

例えば、

  • 文書
  • プログラムのソースコード
  • 実行ファイル
  • 表計算データ
  • 研究データ

などでは、一文字や一つの数値が変化しただけでも内容が変わってしまうことがあります。そのため、このようなデータには元のデータを完全に復元できる可逆圧縮が適しています。

例えば、次の文字列を考えます。

AAAAABB

Aが5個、Bが2個連続しているので、

A5B2

のように表せば、同じ文字を何度も記録する必要がなくなります。

このように、同じ値が連続する部分を

値 + 連続する個数

で表す方法をランレングス圧縮(Run-Length Encoding:RLE)といいます。

同じ値が長く続くデータでは高い圧縮効果が得られますが、

ABCDEFG

のように値がほとんど繰り返されないデータでは圧縮効果は小さくなります。

したがって、同じ圧縮方式でも、圧縮するデータの性質によって圧縮後のデータ量は異なります。

出現頻度を利用した圧縮

可逆圧縮では、同じ値の繰返しだけでなく、記号の出現頻度の偏りを利用することもできます。

例えば、A、B、Cの出現確率が

A:0.6
B:0.3
C:0.1

であるとします。

出現頻度の高いAには短い符号、頻度の低い記号には長い符号を割り当て、

A → 0
B → 10
C → 11

とします。

それぞれの符号長は、

A:1ビット
B:2ビット
C:2ビット

です。

1記号当たりの平均符号長は、

0.6×1+0.3×2+0.1×2
=0.6+0.6+0.2
=1.4ビット

となります。

このように、よく現れる記号に短い符号を割り当てることで、平均的なデータ量を小さくできることがあります。

ハフマン符号などは、この考え方を利用した代表的な可逆圧縮方式です。

非可逆圧縮

非可逆圧縮は、データの一部を取り除くなどしてデータ量を減らす方式です。

一度取り除いた情報は元には戻らないため、展開しても

圧縮前のデータと完全に同じデータにはなりません。

主に、

  • 写真
  • 音声
  • 動画

などで利用されます。

人間の視覚や聴覚には、変化に気付きやすい情報と気付きにくい情報があります。非可逆圧縮では、このような人が知覚しにくい情報を減らしたり、細かな値を近い値にまとめたりすることで、大きくデータ量を減らすことができます。

代表例として、

  • JPEG:主に写真などの画像
  • MP3:音声

などがあります。

例えばJPEGでは、写真の細かな情報を近似することでデータ量を減らします。そのため、圧縮率を高めすぎると、細部が失われたり、ブロック状の乱れなどが目立ったりすることがあります。

可逆圧縮と非可逆圧縮の使い分け

可逆圧縮と非可逆圧縮のどちらを使うかは、元のデータを完全に復元する必要があるかによって判断するとよいでしょう。

データ適した圧縮理由
プログラム可逆圧縮一文字でも変化すると動作が変わる可能性がある
文書可逆圧縮文字や数値を失えない
研究データ可逆圧縮元の値を正確に保存する必要がある
写真非可逆圧縮を利用できる多少の画質低下を許容できる場合がある
音楽非可逆圧縮を利用できる聞き取りにくい情報などを減らせる
動画非可逆圧縮を利用できる通信量や保存容量を大きく減らせる

例えば、配布用プログラムを圧縮した場合、展開後のデータは元のプログラムと完全に同じでなければなりません。

ハッシュ値を使ってファイルが一致しているか確認する場合も同様です。元のファイルから1ビットでも変化すれば、通常はハッシュ値も変化するため、完全な復元が必要なデータには可逆圧縮を使用します。

一方、Webページに掲載する写真などでは、多少の画質低下を許容してデータ量を小さくすることができるため、非可逆圧縮が適していることがあります。

ZIP

ZIPは、複数のファイルやフォルダを一つのファイルにまとめられるアーカイブ形式であり、通常は可逆圧縮も行います。

例えば、

report.docx
data.csv
image.png

などをまとめて、

files.zip

という一つのファイルにできます。

ZIPで圧縮したデータは、展開すれば元のファイルを完全に復元できます。

ただし、ZIPにすれば必ず大幅に小さくなるわけではありません。

JPEGやMP3などは、もともと圧縮された状態で保存されているため、さらにZIPで圧縮してもほとんど小さくならない場合があります。

つまり、圧縮効果は圧縮方式だけでなく、元データにどの程度の規則性や冗長性が残っているかにも左右されます。

JPEG・GIF・BMP

画像形式によって圧縮方法も異なります。

JPEG

JPEGは、主に写真に使われる画像形式で、一般的には非可逆圧縮を利用します。

人間が気付きにくい細かな情報を減らすことで、写真を比較的小さなデータ量で保存できます。

ただし、圧縮を強くすると画質が低下します。

GIF

GIFで使用される圧縮そのものは可逆圧縮です。

ただし、GIFは扱える色数に制限があるため、多数の色を含む写真をGIFに変換すると、変換の段階で色が失われる場合があります。

BMP

BMPはラスタ形式の画像形式であり、画素を並べて画像を表します。

BMPには複数の形式がありますが、一般には画素データをほぼそのまま格納する非圧縮の形式がよく使われます。そのため、同じ大きさ・色数のJPEGなどと比べると、ファイルサイズが大きくなりやすいです。

MP3

MP3は、音声データを圧縮して保存するために広く使われている形式です。

一般的なMP3では非可逆圧縮を行います。

人間の聴覚特性を利用し、聞き取りにくい音などの情報を減らすことで、元のPCM音声などより大幅にデータ量を減らすことができます。

したがって、MP3を展開しても、圧縮前の音声データとビット単位で完全に同じ状態には戻りません。

動画の圧縮

動画は、多数の静止画像を短い時間間隔で次々に表示することで動きを表しています。

例えば1秒間に30枚の画像を表示する動画なら、

1秒間 → 30フレーム

です。

各フレームをそのまま保存すると非常に大きなデータ量になるため、動画ではさまざまな圧縮が行われます。

各フレームを圧縮する

一つの方法は、それぞれのフレームを静止画像のように圧縮することです。

各フレームのデータ量を減らせば、動画全体のデータ量も減らせます。

フレーム間の違いを利用する

動画では、隣り合うフレームの内容がほとんど同じことが多くあります。

例えば、固定したカメラで列車を撮影すると、

  • 背景の建物
  • 地面

などはほとんど変化せず、主に列車の位置だけが変化します。

そこで、

前のフレームと変化した部分を中心に記録する

ことでデータ量を小さくできます。

このため、カメラを三脚に固定すると背景が安定し、フレーム間の共通部分が多くなりやすくなります。

反対に、

  • カメラを左右に動かす
  • 拡大・縮小する
  • 不規則に揺らす

と背景を含む広い範囲がフレームごとに変化するため、単純に考えればフレーム間の差分を利用した圧縮の効率は低くなりやすくなります。

実際の動画圧縮では、物体の移動を予測する動き補償など、より高度な技術も利用されています。

ビットレートと画質

動画や音声では、ビットレートも重要です。

ビットレートは、

1秒間に使用するデータ量

を表し、例えば

5 Mbps

なら、1秒当たり約5Mビットのデータを使用することを意味します。

同じ解像度やフレームレートの動画であっても、圧縮後のビットレートを大きく下げれば、1秒間に記録できる情報量が減ります。

その結果、

  • 細部がぼやける
  • ブロック状の乱れが見える
  • 動きの激しい部分が崩れる

などの圧縮アーティファクトが目立つことがあります。

非可逆圧縮を繰り返した場合

非可逆圧縮では、一度圧縮すると一部の情報が失われます。

例えば、

元画像
↓
JPEGで保存
↓
展開
↓
再びJPEGで保存

という処理を繰り返すと、再保存のたびに新たな近似や丸めが行われ、画質劣化が累積する場合があります。

一度失われた情報は、展開しても元には戻りません。

そのため、何度も編集する画像や動画では、

  • 編集中は非可逆圧縮を繰り返さない
  • 高品質なデータを保存しておく
  • 用途に適した編集用形式を利用する

といった考え方が重要になります。

動画の用途と圧縮方式

動画の圧縮方法は用途によって選ぶ必要があります。

ネット配信用

ネット配信では、

  • データ量
  • 通信速度
  • 画質
  • 再生のしやすさ

などのバランスが重要です。

そのため、高い圧縮効率をもつ非可逆圧縮が利用されることが多くあります。

編集・保存用

何度も編集する動画では、再圧縮による画質劣化や編集のしやすさを考える必要があります。

そのため、配信用とは異なる設定や圧縮方式を選ぶことがあります。

圧縮前後のデータ量

圧縮に関する問題では、圧縮前後のデータ量を計算することも多くあります。

例えば、圧縮前が

15Mバイト

で、圧縮後の大きさが元の40%なら、

15×0.40=6Mバイト

となります。

ただし、「圧縮率」という言葉は文脈によって意味が異なる場合があるため注意が必要です。

例えば、

圧縮後のデータ量が元の40%

という意味なら、

圧縮後 ÷ 圧縮前 = 0.40

です。

一方、

データ量を40%削減した

という意味なら、

圧縮後 ÷ 圧縮前 = 0.60

となります。

問題では、「圧縮後が何%になるのか」「何%削減するのか」を確認して計算することが重要です。

削減割合

例えば、400バイトのデータを250バイトに圧縮したとします。

削減したデータ量は、

400-250=150バイト

です。

圧縮前に対する削減割合は、

150÷400=0.375

となります。

したがって、

削減割合 = 0.375
削減率 = 37.5%

です。

一方、圧縮後に残っている割合は、

250÷400=0.625

つまり62.5%です。

EXAMPLE

例題

圧縮 · EXAMPLEオリジナル問題

可逆圧縮の特徴として、最も適切なものはどれか。

  1. 0

    展開しても元のデータを完全には復元できない。

  2. 1

    画像や音声の画質を必ず低下させる。

  3. 2

    MP3だけに用いられる音声専用の方式である。

  4. 3

    展開すると元のデータを完全に復元できる。

解答・解説を確認

正解3.展開すると元のデータを完全に復元できる。

解説

可逆圧縮は、展開したときに元のデータを完全に復元できる圧縮方式です。文書やプログラムなど、1ビットでも失うと内容が変わり得るデータに適しています。これに対して非可逆圧縮は、知覚しにくい情報などを取り除いてデータ量を減らすため、元のデータを完全には復元できません。MP3は代表的な非可逆音声圧縮方式であり、可逆圧縮ではありません。

出典
オリジナル問題

PRACTICE

圧縮の問題に挑戦