Amazon Web Services ブログ

基本に立ち返る: 動画圧縮の裏側で使われる仕組み

動画エンコーディング

この Blog では、動画エンコーディング処理(圧縮)の基本について、簡単な言葉で説明していきます。

圧縮・エンコーディングの主な目的は、動画の記録、保存および伝送するのに必要となるデータの量を削減することです。これは、ストレージハードウェア、データ伝送時間、必要となる配信帯域幅の削減に繋がります。

動画をエンコードするための多くの異なるアルゴリズム(例えば、MPEG-2、H.264/AVC、H.265/HEVC、VP9、AV1 など)が存在しますが、今日使われている一般的なコーデックのほとんどは、このブログ記事で紹介する共通の原理に従います。

Joint Photographic Experts Group もしくは JPEG 圧縮

デジタル画像を圧縮するために最も一般的に使用されているアルゴリズムの一つから始めましょう。Joint Photographic Experts Group もしくは JPEG 圧縮は単一の画像・フレームで機能します。画像ファイルを保存するときや、プレゼンテーションに画像を追加するとき、または写真をメールで送るときに、.JPEG(もしくは .JPG)ファイル拡張子に馴染みがあるかもしれません。

自転車に乗っている人と、背景に木がある場面の写真を撮ったと想像してみてください。

Picture capture

JPEG アルゴリズムは、一部の色情報(私たちはそれほど敏感ではなく、人間の知覚には色の変化よりも明るさの変化の方が重要なため)および写真のより複雑な部分の一部の詳細(高周波の変化よりも低周波の光の変化の方が、私たちにとって重要)などの、人間の目にはあまり気づかれない要素を破棄することで画像を圧縮します。

選択した圧縮率によっては、削除するすべてのデータが圧縮後の写真の品質に影響を与える可能性があります。そのため、JPEG は非可逆圧縮方式と呼ばれ、元の画像の情報が失われ、復元できず、画質に影響を与える可能性があります。

適切な圧縮レベルは、画像のユースケース次第となります。例えば、オンライン専用の静止画像は、大きなフォーマットで印刷するよりもさらに圧縮できます。目的の用途に対してファイルが過度に圧縮されると、画像はピクセル化され、画質が低下します。

詳しくは、インターネット上に JPEG 圧縮に関する多数の優れた記事があります(いくつかのより詳細な資料はこちら)。しかし、理解しておくべき重要なことは、JPEG はフレーム内符号化圧縮アルゴリズムである、ということです。フレーム内符号化(Intra)とは、その画像を表示するために必要なすべての情報が、その画像の中にあることを意味します。

Motion JPEG

さて、先ほどと同じ場面で、自転車に乗っている人が動いている動画を録画すると想像してみてください。

Video capture

カメラは、実際は、連続した静止画を記録します。

Video frame sequence representation as part of independent pictures

そして、それらの静止画を圧縮するために、JPEG アルゴリズムを各フレームに適用できます。

Video frame sequence representation in Motion JPEG format

これは Motion JPEG と呼ばれ、最初に広く使われた動画圧縮技術のひとつでした。この手法は、空間的な冗長性を排除することで、動画を効果的に圧縮します(詳細な説明についてはこちら)。ただし、この手法では、背景や木など、フレーム間で共通する画像の部分は考慮されません。

Video frame sequence representation in conjunction with temporal redundancy

フレーム間で共通するデータは時間冗長性と呼ばれ、より良い圧縮率を得るために動画から削除できます。

Moving Picture Experts Group codecs (MPEG).

時間冗長性を取り除くために、フレーム間圧縮技術が考案されました(フレーム間(Inter)とは、あるフレームとあるフレームの間や、複数のフレームの間、を意味します)。フレーム間圧縮技術としては MPEG が最もよく知られています。JPEG のように、MPEG エンコーディングは「マクロブロック」と呼ばれる基本単位で行います。

フレームはスライスに分割され、スライスはマクロブロックで構成されています。マクロブロックはピクセルのブロックで構成され、ピクセルが画像の中で制御可能な最小の要素となります。マクロブロックは、動画エンコーディング処理において基本オブジェクトとして使用されます。

Macroblock concept introduction

I, B, P フレーム

エンコーディングがどのように機能するか大まかに見てみましょう。

エンコーダーは、一定数のフレームをキャッシュし、最初のフレームにフレーム間アルゴリズムを適用します。このフレームは、イントラコード化フレームまたは情報フレーム(I フレーム)という名称で、マクロブロックに分割され、JPEG のような方法でエンコードされます。

I Frame concept introduction

後続のフレームを見ると、冗長な情報がたくさんあることに気づくでしょう。例えば、木はすべてのフレームに常に存在しており、自転車はあるフレームから次のフレームへの移動として表現されます。動画に固有の時間冗長性をうまく利用するために、MPEG は予測フレーム(P フレーム)と双予測フレーム(B フレーム)と呼ばれる新しいタイプのフレームを定義しました。

P フレームはどのようにエンコードするでしょうか?連続する先のフレームのどこかを 2 番目のフレームと考えて、最初の I フレームを参照として使用します。

P Frame concept introduction

MPEG アルゴリズムは、これらのフレーム間のマクロブロックの変換を把握するために、動き推定と呼ばれる技術を使用します。この情報を使用して、簡単に言えば、動き推定の結果に従って最初のフレームからマクロブロックを変換し、動き補償フレームと呼ばれるフレームを形成します。そして、選択したフレームと動き補償されたフレームとの差分を取得し、JPEG に似た手法を使用してその差分をエンコードします。

P Frame concept introduction

このフレーム内の各マクロブロックは、I マクロブロックまたは P マクロブロックとしてエンコードできます。I マクロブロックは I フレームの中のマクロブロックのようにエンコードされます。P マクロブロックは過去の参照画像の領域に誤差項(2 つのマクロブロックの間の違い)を加えたものとしてエンコードされます。そのため、変化しなかったピクセルは再作成されず、I フレームから参照されます(以下を参照)。

P Frame concept introduction

P フレームは、時間および空間的圧縮をうまく利用することで I フレームよりも良い圧縮を提供し、動画ストリーム内で使用するビット数を減らします。

次に、エンコーダーは I フレームと最初の P フレームの間にあるフレームを選択します。

B Frame concept introduction

P フレームのように、このフレームは動きベクトルと変換係数で表現されます。しかし、動き分析は前の I フレームと続く P フレームを双方向で見て行われます。他の処理はすべて、ここまで P フレームについて説明したものと似ています。

B Frame concept introduction

このようなフレームのことを双予測フレームもしくは B フレームと呼びます。B フレームは最も高いデータ圧縮率を得るために、以前のフレームと将来のフレームの両方のフレームをデータ参照に利用できます。

シーケンスの中にさらに進みます。エンコーダーは別の予測フレームを作成します。そしてこの場合、前の P フレームと I フレームから情報を取得できます。

そして、すべてのフレームがエンコードされるまで、P フレームと B フレームでシーケンスを埋めるための処理が繰り返されます。

Video frame sequence representation in MPEG format

Presentation time stamp (PTS) と Decoding time stamp (DTS)

次に、フレームが撮影された順番で、フレームを視聴者に対して表示される必要があります。この順序付けを確実にするために、各フレームにプレゼンテーションタイムスタンプが割り当てられます。

PTS concept introduction

しかし、フレームはエンコードされた順番で再構築またはデコードされる必要があります。最初に I フレームが構築され、次に P フレームが構築されます。その次に、B フレームを構築できます。この順序の記録を付け、このデータを転送するために、デコードタイムスタンプが各フレームに割り当てられます。

その結果として、デコーダーはフレームをデコード順に再構築し、動画視聴のために表示すべき表示順で、視聴者に対して各フレームを表示します。

PTS&DTS concept introduction

Group of Pictures (GOP)

いくつかの理由で(詳細はこちらの Blog 記事を参照ください)、上記の B フレームと P フレームのシーケンスは無限にはできません。ある時点で、I フレームが再び挿入される必要があります。

Group of Pictures(もしくは GOP 構造)は Intra フレームと Inter フレームが配置される順序を規定します。通常、I フレームは GOP の始まりを示します。

GOP 長(GOP サイズ)は 2 つのキーフレーム間の長さで、フレーム数もしくはキーフレーム(I フレーム)間の時間で測定されます。

理想的な GOP 長は用途に依存しますが、I フレーム間の典型的な GOP サイズは 30、60、90 フレームか、地域によっては 25、50、100 フレームになります。

GOP は、ある I フレームから次の I フレームの前の最後のフレームまで実行され、その後プロセスが繰り返されます。

GOP concept introduction

まとめ

Group of Pictures(GOP)や、様々なフレームタイプ、PTS や DTS などの重要な概念とともに、一般的な圧縮アルゴリズムがどのように機能するのかについて、この記事を通して、よりよく理解していただけていれば幸いです。

動画のエンコード方法とその挙動について理解を深められたので、Amazon Web Services (AWS) を利用して独自の動画ワークフローを構築することを検討することをお勧めします。AWS Elemental MediaLiveAWS Elemental MediaConvert などの目的別 AWS Media Services は、はじめの一歩として最適です。

また、この無料の 1 時間の基礎動画も御覧ください。この動画では動画技術の重要な概念をわかりやすく解説しており、コンテンツをソースから視聴者の画面に表示するまでのプロセスをさらに理解するのに役立ちます。

参考リンク

AWS Media Services
AWS Media & Entertainment Blog (日本語)
AWS Media & Entertainment Blog (英語)
AWS のメディアチームの問い合わせ先: awsmedia@amazon.co.jp
※ 毎月のメルマガをはじめました。最新のニュースやイベント情報を発信していきます。購読希望は上記宛先にご連絡ください。

翻訳は SA 石井が担当しました。原文はこちらをご覧ください。