マジックH.264







H.264はビデオ圧縮標準です。 ユビキタスであり、インターネット、Blu-ray、電話、監視カメラ、ドローンなど、あらゆる場所でビデオを圧縮するために使用されます。 誰もが現在H.264を使用しています。



H.264の製造可能性に注意する必要があります。 高品質のビデオを送信するために必要なチャネル帯域幅を削減するという1つの目標を掲げた30年以上の作業の結果として登場しました。



技術的な観点から、これは非常に興味深いです。 この記事では、いくつかの圧縮メカニズムの動作の詳細を表面的に説明しますが、詳細に飽きないようにします。 さらに、以下で説明するテクノロジーのほとんどは、H.264だけでなく、ビデオ圧縮全般に有効であることに注意してください。



なんでわざわざ圧縮するの?


非圧縮ビデオは、各フレームのピクセルに関する情報を含む2次元配列のシーケンスです。 したがって、これは3次元(2つの空間次元と1つの一時)バイト配列です。 各ピクセルは3バイトでエンコードされます-3つの原色(赤、緑、青)ごとに1つです。



1080p @ 60 Hz = 1920x1080x60x3 =>〜370 Mb / sデータ。



使用することはほとんど不可能です。 50GBのBlu-rayディスクは約2分しか保持できません。 ビデオ。 コピーも簡単ではありません。 SSDでさえ、メモリからディスクへの書き込みに問題あります



そのため、圧縮が必要です。



なぜH.264なのか?


私は間違いなくこの質問に答えます。 しかし、最初に、私はあなたに何かを見せます。 Appleのホームページをご覧ください。







画像を保存し、例2のファイルを提供します。







ええと...何? ファイルサイズが混同されているようです。


いいえ、サイズは問題ありません。 300フレームのH.264ビデオの重量は175 Kbです。 ビデオからPNGへの単一フレーム-1015 Kb。



ビデオには300倍のデータを保存するようですが、ファイルの重量は5倍少なくなります。 H.264はPNGよりも1,500倍効率的であることがわかりました。



これはどのように可能ですか、レセプションは何ですか?


そして、多くのトリックがあります! H.264は、推測できるすべてのトリックを使用します(そして、それほど多くはありません)。 主なものを見ていきましょう。



余分な体重を取り除きます。



レース用に車を準備していて、スピードを上げる必要があると想像してください。 最初に何をしますか? 体重が減ります。 車の重量が1トンだとしましょう。 あなたは不要な詳細を捨て始める...後部座席? Pff ...それを捨てます。 サブウーファー 音楽なしでもできます。 エアコン 必要ありません。 ギアボックス むそうで...待って、重宝します。



したがって、必要なものを除くすべてのものを取り除きます。



不要なセクションを破棄するこの方法は、非可逆データ圧縮と呼ばれます。 H.264は損失を伴うエンコードを行い、重要性の低い部分を破棄して重要な部分を保持します。



PNGは損失なしでエンコードします。 つまり、すべての情報がピクセル単位で保存されるため、PNGでエンコードされたファイルから元の画像を再作成できます。



重要な部品? アルゴリズムはどのようにしてフレーム内の重要性を判断できますか?


画像をトリミングするには、いくつかの明らかな方法があります。 おそらく、画像の右上の4分の1は役に立たないので、この角を削除すると元の重量の3分の4に収まります。 現在、車の重量は750 kgです。 または、境界線全体の特定の幅のエッジをカットできます。重要な情報は常に中央にあります。 はい、可能ですが、H.264はこのすべてを行うわけではありません。



H.264は実際に何をしますか?


H.264は、すべての非可逆圧縮アルゴリズムと同様に、粒度を低下させます。 以下は、詳細を取り除く前後の画像の比較です。







MacBook Proのスピーカーグリルの穴が圧縮画像でどのように消えたのかをご覧ください。 ズームインしないと、気付かない場合があります。 右側の画像の重量は元の画像のわずか7%であり、これは従来の意味では圧縮されていなかったという事実にもかかわらずです。 重量がわずか70 kgの車を想像してください!



7%すごい! このような方法で詳細を取り除くことはどのように可能ですか?


まず、いくつかの数学。



情報エントロピー



私たちは最も興味深いものに来ます! コンピュータサイエンスの理論を訪れた場合は、おそらく情報エントロピーの概念を思い出してください。 情報エントロピーは、一部のデータを表すための単位の数です。 これはデータ自体のサイズではないことに注意してください。 これは、すべてのデータ項目を表すために使用する必要がある最小単位です。



たとえば、データの形でコイントスを1回実行すると、エントロピーは1単位になります。 コイントスが2の場合、2ユニットが必要です。



コインが非常に奇妙であると仮定します-それは10回裏返され、ワシは毎回落ちました。 これについて誰かにどのように伝えますか? どういうわけかLLCOOOOOOO、あなたは「10回投げ、すべてのワシ」と言うことはまずありません-ブーム! 情報を絞ったところです! 簡単です。 長い疲れる講義からあなたを救いました。 もちろん、これは非常に単純化されていますが、データを同じ情報コンテンツを使用した一種の短いプレゼンテーションに変換しました。 つまり、冗長性が削減されました。 データの情報エントロピーは影響を受けていません-ビューを変換しただけです。 この方法はエントロピーエンコーディングと呼ばれ、あらゆる種類のデータのエンコーディングに適しています。



周波数空間



情報エントロピーがわかったので、データ自体の変換に移りましょう。 基本システムでデータを提示することは可能です。 たとえば、バイナリコードを使用する場合、0と1があります。16進システムを使用する場合、アルファベットは16文字で構成されます。 上記のシステムの間には1対1の関係があるため、簡単に別のシステムに変換できます。 これまでのところ、すべてが明らかになっていますか? 続けましょう。



そして、まったく異なる座標系で空間または時間で変化するデータを想像できると想像してください。 たとえば、画像の明るさ、およびxとyの座標系ではなく、周波数系を使用します。 したがって、freqXおよびfreqYの周波数は軸上にあり、この表現は周波数ドメイン表現と呼ばれます。 そして、十分に高いfreqXとfreqYで、そのようなシステムで損失なしに任意のデータを表すことができるという定理があります。



わかりましたが、freqXとfreqYとは何ですか?


freqXとfreqYは、座標系のもう1つの基礎です。 バイナリから16進数に切り替えることができるように、XYからfreqXおよびfreqYに切り替えることができます。 あるシステムから別のシステムへの移行を以下に示します。







MacBook Pro Fine Gridには高周波情報が含まれており、高周波領域にあります。 そのため、小さな部品は頻度が高く、色や輝度などの滑らかな変化は低くなります。 間にあるものはすべて間に残ります。



このビューでは、低周波の詳細は画像の中心により近く、高周波の詳細は隅にあります。



これまでのところ、すべてが明確ですが、なぜこれが必要なのですか?


これは、周波数間隔で表示される画像を取得して角を切り取る、つまりマスクを適用することで詳細を下げることができるためです。 また、イメージを変換して使い慣れたものに戻すと、元のイメージに似たままですが、詳細が少ないことがわかります。 そのような操作の結果として、スペースを節約します。 目的のマスクを選択することにより、画像の詳細を制御できます。



以下はおなじみのラップトップですが、円形マスクが適用されています。







割合は、元の画像に対する情報エントロピーを示します。 ズームインしないと、2%でも違いは目立ちません! -車の重量は20 kgになりました!



これはあなたが体重を減らすために必要な方法です。 この非可逆圧縮プロセスはQuantizationと呼ばれます。



これは印象的です、他にどんなトリックが存在しますか?




色処理



人間の目は、似たような色合いを区別しません。 明るさのわずかな違いは簡単に認識できますが、色はわかりません。 したがって、余分なカラー情報を取り除き、さらにスペースを節約する方法が必要です。



テレビでは、RGBカラーはYCbCrに変換されます。Yは輝度成分(基本的には白黒画像の明るさ)、CbとCrは色成分です。 RGBとYCbCrは、情報エントロピーに関して同等です。



なぜそれを複雑にするのですか? RGBでは十分ではありませんか?


白黒テレビの時代にはYコンポーネントしかありませんでしたが、カラーテレビの出現により、エンジニアはRGBのカラー画像を白黒で送信する作業を行いました。 したがって、送信用の2つのチャネルの代わりに、色をCbおよびCr成分にエンコードしてYとともに送信することが決定され、カラーTV自体が色および輝度成分を通常のRGBに変換します。



しかし、コツは次のとおりです。輝度成分はフル解像度でエンコードされ、色成分はわずか4分の1です。 そして、これは無視することができます、なぜなら 目/脳は色合いを区別しません。 したがって、イメージサイズを半分に縮小し、差異を最小限に抑えることができます。 2回! 機械の重量は10 kgです!



カラー解像度を下げて画像をコーディングするこの技術は、 カラーサブサンプリングと呼ばれます。 それはどこでも長い間使用されており、H.264だけでなく適用されます。



これらは、非可逆圧縮のサイズを縮小する上で最も重要なテクノロジーです。 細部のほとんどを取り除き、色情報を2倍に減らすことができました。



もっと持てますか?


はい 写真の切り抜きは最初の一歩にすぎません。 その瞬間まで、私たちは単一のフレームを分解していました。 今度は、時間の圧縮を見てみましょう。そこでは、グループの人たちと協力する必要があります。



動き補償



H.264は、動きを補正する標準です。



動き補償? これは何ですか


テニスの試合を見ていると想像してください。 カメラは固定されており、特定の角度から撮影します。移動するのはボールだけです。 これをどのようにエンコードしますか? いつも通りですよね? ピクセルの3次元配列、空間内の2つの座標、一度に1つのフレームですか?



しかし、なぜですか? ほとんどの画像は同じです。 フィールド、グリッド、観客は変わらず、動くのはボールだけです。 単一の背景画像と、それに沿って動くボールの画像を1つ定義するとどうなりますか。 それは多くのスペースを節約しませんか? あなたは私が何を得ているのかわかりますよね? 動き補償?



それがまさにH.264が行うことです。 H.264は画像をマクロブロック(通常は16x16)に分割し、動きの計算に使用します。 1つのフレームは静的なままで、通常はIフレーム[イントラフレーム]と呼ばれ、すべてが含まれます。 後続のフレームは、Pフレーム[予測]またはBフレーム[双方向予測]のいずれかです。 Pフレームでは、動きベクトルは前のフレームに基づいて各マクロブロックに対してエンコードされるため、デコーダーは前のフレームを使用し、ビデオの最後のIフレームを取得し、現在のフレームに到達するまで次のフレームに徐々に変更を加えます。



Bフレームの場合、物事はさらに興味深いものになります。Bフレームでは、前後のフレームに基づいて両方向で計算が実行されます。 これで、記事の冒頭のビデオの重量が非常に少ない理由がわかりました。これらは、マクロブロックが飛び交う3つのIフレームにすぎません。



このテクノロジーでは、動きベクトルの違いのみがエンコードされるため、動きのあるビデオの高い圧縮率が得られます。



静的および一時的な圧縮を調べました。 量子化の助けを借りて、データサイズを何度も減らした後、カラーサブサンプリングの助けを借りて結果を半分に減らし、今では動き補償によって考慮されているビデオに元々あった300フレームのうち3フレームのみを保存することができました。



印象的ですね。 今何?


ここで、従来のロスレスエントロピーコーディングを使用して線を引きます。 どうして?



エントロピーコーディング



非可逆圧縮ステップの後、Iフレームには冗長データが含まれます。 PフレームとBフレームの各マクロブロックのモーションベクトルには、最初のビデオで見られるように、多くの場合同じように移動するため、同じ情報がたくさんあります。



このような冗長性は、エントロピーコーディングによって排除できます。 また、データ自体について心配することはできません。これは標準の可逆圧縮技術であり、すべてを復元できるためです。



これですべてです! H.264は、前述のテクノロジーに基づいています。 これが標準の基礎です。



いいね! しかし、私は車の重量を知るために好奇心から解かれています。


元のビデオは1232x1154の非標準解像度で撮影されました。 数えると、次のものが得られます:



5秒 @ 60 fps = 1232x1154x60x3x5 => 1.2 GB

圧縮ビデオ=> 175 Kb



結果を機械の合意された重量1トンと相関させると、 0.14 kgに等しい重量が得られます 140グラム!



はい、これは魔法です!



もちろん、私は非常に単純化された形で、この分野での数十年にわたる研究の結果を発表しました。 もっと知りたいなら、ウィキペディアページは非常に有益です。



All Articles