次に、ビデオ圧縮のいくつかの基本的な概念を正確に説明します。 それらのいくつかはやや時代遅れであるか、あまりにも簡単に説明されていますが、同時にすべてがどのように機能するかについて最小限のアイデアを与えます。
![画像](https://habrastorage.org/storage/habraeffect/85/58/8558e8e1546c41ffa686da9f0a987366.png)
動きを補償するために動きベクトルを検索します(-:これについての詳細...
ビデオストリーム機能
ほとんどすべての人が知っているように、ビデオは時間とともに互いに置き換わる多くの静止画像です。 さらに、この順序付きセットをビデオストリームと呼びます。 これらは異なるため、ここでは小さな分類を行うのに非常に役立ちます。
- ピクセル形式 ピクセルは、色以外の情報を提供しません。 ただし、色の知覚は非常に主観的であり、ほとんどの人が受け入れられる色レンダリングおよび色レンダリングシステムを作成するために多大な努力が払われています。 したがって、現実の世界で見られる色は、光の周波数のスペクトルでは非常に複雑であり、デジタル形式で伝送することは非常に難しく、さらに表示することはさらに困難です。 ただし、スペクトル内の3つすべてのポイントが、普通の人の色知覚のメトリックで表示された色を現在に正確に近づけることができることに注意してください。 これらの3つのポイントは、赤、緑、青です。 つまり、線形結合により、可視スペクトルのほとんどの色をカバーできます。 したがって、ピクセルを表現する最も簡単な方法はRGB24で、正確に8ビットの情報が赤、緑、青のコンポーネントに割り当てられます。 したがって、各色の256階調と合計16,777,216種類の色合いを伝達できます。 しかし、実際には、このような色表現は、ストレージ中に実際には使用されません。ピクセルあたり3バイトも費やしているためだけでなく、他の理由でもあります( YV12について)。
- フレームサイズ 。 ビデオストリームのすべてのピクセルを取得してエンコードし、大量のデータを受信しましたが、使用するには不便です。 最初は、すべてが非常にシンプルで、フレームの特徴は、幅、高さ、可視部分のサイズと形式です(詳細は後ほど)。 ここでは、確かに、640x480、720x480、720x576、1280x720、1920x1080などの数字は多くの人に馴染みがあるように見えます。 なんで? はい。異なる規格で表示されるため、たとえば、720x576解像度はヨーロッパのDVDの大部分を占めます。 いいえ、もちろん417x503のビデオを作成できますが、良いものはないと思います。
- フレーム形式 。 フレームのサイズを知っていても、フレームを「パック」する方法に関する情報がなければ、より便利な形式のピクセルの配列を想像することはできません。 最も単純なケースでは、トリッキーなことは何もありません。ピクセルのストリングを取得し、エンコードされた各ピクセルのビットを1行ずつ書き込みます。 つまり、幅とすべての行が順番に並んでいるのと同じ高さのピクセルと同じ数の行を書き出します。 このスキャンはプログレッシブと呼ばれます。 しかし、適切な設定なしでコンピューターでテレビ番組を視聴しようとし、「櫛の効果」を見ました。これは、同じオブジェクトが偶数行と奇数行に対して異なる位置にある場合です。 インターレーススキャンの妥当性については非常に長い間議論することができますが、それは従来のテレビの過去の遺物として残っているという事実です(キネスコープデバイスについて興味がある人は誰でも読んでいます)。 この不快な影響を除去( インターレース解除 )する方法については説明しません。 ここから魔法の表記法が出てきます: 576i、720p、1080i、1080pは 、行数(フレームの高さ)とスキャンのタイプを示します。
- フレームレート 。 標準値の1つ: 23.976、24、25、および29.97フレーム/秒。 たとえば、ヨーロッパのテレビでは25 fps、アメリカでは29.97が使用され、24 fpsの周波数でフィルムに撮影されます。 しかし、「奇妙な」23.976と29.97はどこから来たのでしょうか? 秘密をお伝えします。23.976= 24 / 1.001、および29.97 = 30 / 1.001、つまり、分周器1.001はアメリカのテレビ放送NTSCの標準に含まれています。 したがって、映画が上映されるとき、視聴者には目立たない非常にわずかなスローダウンがありますが、音楽コンサートの場合、ショーの速度は非常に重要であるため、時々フレームをスキップする方がよく、再び視聴者は何にも気付かないでしょう。 私は少しcheしましたが、アメリカのテレビでは「24」フレーム/秒は表示されませんが、「30」インターレースフレーム(59.94ハーフフレーム/秒、電源の周波数に対応)は表示されませんが、「シャッター」方式( 3: 2プルダウン )。 この方法の本質は、2つのフルフレームと5つのハーフフレームがあり、最初の3つのハーフフレームを最初のフレームからの情報で埋め、残りの2つを2番目のフレームで埋めるということです。つまり、ハーフフレームのシーケンスは次のとおりです:[1 top、1 bottom]、[1上部、下部2]、上部2、下部3、上部3、下部3、上部4、下部4など。 ここで、topは一番上の行( fields、fields )で、bottomは一番下の行(つまり、上から順に奇数と偶数)です。 したがって、映画の写真はテレビで見ることができますが、動的なシーンではひきつりが目立ちます。 フレームレートは変動する可能性がありますが、これに関連する多くの問題があるため、このケースは考慮しません。
- グローバル特性 。 上記のすべては、ローカルプロパティ、つまり再生中に反映されるプロパティに適用されます。 ただし、 ビデオストリームの継続時間、データ量、追加情報の利用可能性、依存関係など。 たとえば、ビデオストリームには左目に対応する1つのストリームが含まれ、他のストリームには何らかの方法で右目と左のストリームの違いに関する情報が格納されます。 そのため、ステレオビデオまたは一般的に知られている「3D」を送信できます。
ビデオを圧縮する必要があるのはなぜですか?
ビデオを圧縮せずに転送すると、深刻な問題が発生した場合、十分な通信チャネルやデータを保存する場所がなくなります。 次の特性を持つHDストリームがあるとします。
1920x1080p、24 fps、RGB24などのストリームの「コスト」を計算します。
1920 * 1080 * 24 * 24 = 1139メガビット/秒。90分の映画を録画する場合は、90 * 60 * 1139 = 750ギガバイトが必要です。 かっこいい これは、BluRayで同じ1920x1080pの驚くべき品質の映画のビデオが20 GBを占有するという事実にもかかわらずです。つまり、差はほぼ40倍です。
明らかに、ビデオを圧縮する必要があります。特に、視聴者を喜ばせながら、サイズを40倍以上縮小できることを考えると、特にそうです。
どうすれば保存できますか?
- 色分け 。 確かに多くの人は昔々テレビが白黒だったことを知っていますが、今日のテレビは完全にカラーです。 ただし、白黒テレビはまだ放送を表示できます。 実際には、テレビ信号では、輝度は色成分とは別にエンコードされ、 YUV形式で表示されます(ウィキペディアで詳細)。 ここで、コンポーネントのYは明るさで、UとVは色のコンポーネントであり、これはすべて「魔法の」式を使用して計算されます。
Y = 0.299 * R + 0.587 * G + 0.114 * B
U = -0.14713 * R - 0.28886 * G + 0.436 * B
V = 0.615 * R - 0.51499 * G - 0.10001 * B
見てわかるように、変換は線形で非縮退です。 したがって、R、G、Bの値を簡単に取得できます。Y、U、Vを保存し、それぞれ8ビットを割り当てた場合、ピクセルあたり24ビットが残ったと仮定します。 保存しません。 しかし、人間の目は明るさに敏感ですが、色にあまり注意を払っていません。 はい、そしてほとんどすべての画像で、色はそれほど頻繁に互いに変化しません。 画像を条件付きでY、U、Vレイヤーに分割し、輝度レイヤーを変更せずに、UレイヤーとVレイヤーの高さを半分にし、幅を半分にすると、4倍になります。 以前は、各ピクセルに24ビットが費やされていましたが、現在では4ピクセルあたり8 * 4 + 8 + 8 = 48ビット、つまり、おおよそ、ピクセルあたり12ビットを費やしています(このエンコード形式がYV12と呼ばれる理由です) 色が薄くなるため、大幅な損失なしにフローを2回絞った。 たとえば、JPEGは常にこのような変換を実行しますが、他の考えられるアーティファクトと比較して、色を薄くしても害はありません。 - イメージの冗長性 。 画像圧縮アルゴリズムとの違いはないため、ここでは特に説明しません。 同じJPEGは、 離散余弦変換(DCT)と量子化の方法による局所的な冗長性のために画像を圧縮します。これもWikipediaで読むことができます。 コーデックに組み込まれている静的な画像圧縮アルゴリズムは、実際の画像に似ているリモートでも圧縮する必要があることを指摘するだけですが、その理由はすぐにわかります。
- フレーム間差 。 確かに、ビデオを見ている人は誰でも、画像が劇的に変化せず、隣接するフレームが非常に似ていることに気付くでしょう。 もちろん、突然の変更が発生しますが、通常はシーンを変更するときに発生します。 そして、ここで問題が発生します。コンピューターは、あらゆる可能な画像変換をどのように表現すべきでしょうか? 動き補償アルゴリズムが助けになります。 彼に関するウィキペディアの記事を書きました。 コピー&ペーストを作成しないために、私は主要なポイントにのみ自分自身を制限します。 画像はブロックに分割され、各ブロックの近くで、類似したブロックが別のフレームで検索されるため( 動き推定 )、動きベクトルのフィールドが取得されます。 そして、すでに補正中( モーション補正 )に、 モーションベクトルが考慮され、元のフレームに似た一般的な画像が作成されます。
動き補償前の差
元のフレームと補正されたフレームの違い
ここで、元のフレーム間差が元のフレームと補正されたフレームの差よりもはるかに大きいことがはっきりとわかります。 画像を圧縮するときの情報量を考えると、ほとんど無料でモーションベクトルを保存できます。 彼らはこれを行い、その後、静止画像用の圧縮アルゴリズムによって、補正されたフレーム間差分の画像を圧縮しました。 また、2番目の画像では開いている画像が乱雑なので、画像圧縮アルゴリズムはそのようなもので正しく動作するはずです。 このような画像は冗長性が大きいため、非常に強く圧縮されます。 ただし、コーデックがそれらを過度に圧縮すると、ブロッキング効果が発生します。 古いアルゴリズムは、明るさのオブジェクトの変化を一切考慮していません。そのため、カメラのフラッシュによる大統領のブロック感がテレビに表示されます。 - フレームのシーケンスの組織 。 まず第一に、コーデックは変化するシーンに敏感でなければなりません。 この場合、動き補償は見苦しいため、これを決定するのは非常に簡単です。 以前に遭遇したもののように見えないため、新しいシーンの始まりのフレームを「そのまま」保持することは論理的です。 このようなフレームは、参照フレーム( Iフレーム )と呼ばれます。 そして、動き補償が適用されたフレームがあります。つまり、それらは参照フレームと相互に依存しています。 PフレームまたはB フレームにすることができます。 前者は前のフレームにのみ依存でき、後者は左右の隣接フレームに基づくことができます。 Iフレームとそのすべての従属フレームがGOP (画像のグループ)を形成します。 バイフレームを使用する利点:クイックナビゲーション(以前のバイフレームをデコードする必要がないため)と、それらがフィルムのすべてのフレームの最小サイズであり、品質が少し低いという事実(ただし、より良いフレームでの高速な切り替え)視聴者に目立たないようにします)。
- 出力の冗長性 。 すべての圧縮手順が完了した後でも、係数フローには冗長性があります。 さらに、さまざまな可逆圧縮方法が適用されてもよい。 たとえば、H.264コーデックには、 CABACとCAVLCの 2つのバージョンがあり、強力な確率モデルで算術圧縮を実装し、より単純なモデルでハフマンを実装します。 理由は不明ですが、アップルは後者のオプションを好んでいますが、優れたデコーダーでは速度の違いはわずかです。
結論の代わりに
技術的な詳細が多く載っていない基本的な概念をいくつか説明しようとしました。 次に、コーデック、コンテナなどの構造について説明します。 ビデオの圧縮と処理に真剣に興味がある人のために、VMKモスクワ州立大学のコンピューターグラフィックスとマルチメディアのネイティブラボでサポートされているcompression.ruサイトがあります。
継続するには...