ビデオコーデック技術の基礎知識 ビデオフォーマットからフレームフォーマットまで

ビデオパッケージ形式

MP4、AVI、MKV はすべてローカル ビデオ ファイルのサフィックスで、Windows ではオペレーティング システムがどのアプリケーションを使用してファイルを開くかを示すために使用されます。ストリーミング メディアの世界では、これらは「ビデオ カプセル化形式」と呼ばれています。オーディオとビデオのストリームに加えて、補助情報とビデオとオーディオを整理する方法も含まれているからです。異なるプラットフォームでの異なる形式のビデオのユーザー エクスペリエンスは、オーディオとビデオの整理によってもたらされる違いにより大きく異なります。ビデオ形式は、ビデオ ファイルを再生できるようにビデオ再生ソフトウェアによってビデオ ファイルに与えられる識別子です。簡単に言えば、ビデオ形式はプレーヤーとの通信プロトコルを指定します。

「ビデオ パッケージ形式」は、エンコードされたビデオとオーディオを再生関連のプロトコル データとともに「パッケージ化」したものです。

「ビデオ プロトコル」は Web ストリーミング メディア用であり、一部の記事では「ビデオ プロトコル」を「ビデオ カプセル化形式」として分類しています。「ビデオ プロトコル」と「ビデオ カプセル化形式」はどちらも、オーディオビジュアル コンテンツとメタデータ、およびプロトコル/形式で必要なその他の情報を伝送します。FFMpeg を例にとると、FFMpeg はビデオ形式とビデオ プロトコルを区別しません。ただし、GStreamer では、「ビデオ プロトコル」を指定する必要があるかもしれませんが、「ビデオ カプセル化形式」は区別しません。

ビデオストリーミング

ビデオ ストリームに関して言えば、日常生活の中で「h264 ストリーム」、「yuv ストリーム」、「エンコード ストリーム」、「デコード ストリーム」、「raw ストリーム」、「raw ストリーム」、「圧縮ストリーム」、「非圧縮ストリーム」などの用語を聞いたことがあるはずです。一般に、「ビデオ ストリーム」という場合、次の 2 つの形式しかありません。

1. エンコードされたストリーム(h264、yuv など)

2. 生のストリーム(圧縮されているか圧縮されていないかに関係なく)。

圧縮されていないストリーム データは、デコードされると「生のストリーム」と呼ばれます。ビデオは、時間の経過に伴う一連の連続した「画像」で構成されていると考えられます。ビデオの内部「画像」は「YUV」形式であるため、「YUV ストリーム」と呼ばれることもあります。

圧縮アルゴリズムによって圧縮されたストリーム データは「エンコード ストリーム」と呼ばれ、H.264 圧縮/エンコード アルゴリズムが普及しているため、「H.264 ストリーム」とも呼ばれます。

概要: 「H.264 ストリーム」、「エンコード ストリーム」、および「圧縮ストリーム」は、圧縮/エンコードされたビデオ ストリームを指します。一方、「YUV ストリーム」、「デコード ストリーム」、および「非圧縮ストリーム」は、圧縮/エンコードされていないビデオ ストリームを示します。「Raw ストリーム」は、文脈に応じて前者または後者のいずれかを指す可能性がある、曖昧な用語です。

日常生活で目にするビデオ ファイルの大部分はエンコード/圧縮されており、ネットワーク転送シナリオでも大部分はエンコード/圧縮されています。ビデオの再生中、視聴者はフレームごとに RGB に変換されたデコードされたビデオ ストリームを目にします。

エンコード/圧縮は、ストリーミング メディアの分野で非常に重要なテクノロジです。H264 ビット ストリームから YUV ストリームへのプロセスはデコードと呼ばれ、その逆はエンコードと呼ばれます。

フレームフォーマット

ストリーミングメディアの分野では、「ストリーミング」が重要であり、基本要素である「フレーム」も同様に重要です。その理由は、ビデオエンコード/圧縮では、時間的に連続する一連のフレームデータをできるだけ小さなスペースにエンコードすることが核心であるのに対し、ビデオデコードでは、エンコード/圧縮された一連のフレームデータをできるだけ元の状態に復元しようとするからです。

100% 復元可能なコーディング/圧縮アルゴリズムは可逆圧縮と呼ばれ、その逆は非可逆圧縮と呼ばれます。

「フレーム」は、私たちが通常目にする「画像」に関連付けることができます。ただし、私たちが通常目にする画像は RGB 形式であるのに対し、ビデオ フレームは通常 YUV 形式です。

最大の圧縮率を達成することで、人間の目が感じる歪みを最小限に抑えることができます。「YUV」の 3 つのチャネルのうち、「Y」は明るさ (Lumina nce または Luma)、つまりグレー スケール値を表し、「U」と「V」は色度 (Chrominance または Chroma) を表します。科学者は、人間の目は UV に対する感度が最も低いため、UV の 2 つのチャネルの値を大幅に圧縮できることを発見しました。YUV 形式を学習するビデオ コーデックを参照してください。

白黒テレビとの互換性のため。これには歴史的な理由が関係しますが、著者はゼロベース エントリのオーディオおよびビデオ開発を強く推奨しています。歴史的には、ビデオ フレーム形式を提案する際に、RGB を使用するように提案されていましたが、最終的に YUV を使用することを決定した本当の理由はこれです。

YUV サンプリング: 「YUV444」「YUV422」「YUV420」

YUV の後に数字の文字列が続く場合、「YUV」はもはや色空間のベースではなく、元の「YUV ストリーム」のサンプルを意味します。

444、422、420 ​​は 3 つの「YUV」(デジタル回路では YCbCr を指します) サンプルで、3 つの数字は Y\U\V (デジタル回路では Y\Cb\Cr、この段落の後半でも同じ) チャネルのサンプリング比を表します。したがって、444 はフル サンプリングであり、422 はそれぞれ Y のフル サンプリングと U\V の 1/2 均一サンプリングであることがわかります。

フレームはピクセルの長方形で、たとえば 4x4 画像は 16 ピクセルで構成されています。通常の「RGB」画像では、各ピクセルは少なくとも 3 つのチャネル、R\G\B (および場合によってはアルファ コンポーネント) で構成されている必要があり、各コンポーネントの値は通常 [0,255]、つまり [2^0, 2^8] であるため、1 ピクセルが 3 バイトを占めると言われることがよくあります (RGBA などの他のコンポーネントがある場合は、話は異なります)。同じことが、各ピクセルが Y\U\V で構成される「YUV」画像にも当てはまります。

4X4 画像を例にとると、次の図は YUV444 サンプリング、つまりフルサンプリングに対応しており、図では各ピクセルの Y\U\V チャネルが保持されていることがわかります。一般に、YUV444 は大きすぎるため、ほとんど使用されません。

ビデオコーデック技術の基礎知識 ビデオフォーマットからフレームフォーマットまで

下の図は、各スキャン ラインまたは行に隣接する 2 つのピクセルである YUV422 サンプリングに対応しています。

1ピクセルのU \ V成分のみが取得されます。また、各ピクセルは元のサイズの2/3を占めると計算できます。

したがって、YUV422 は YUV444 の 2/3 のサイズになります。 2 つの隣接するピクセルの Y コンポーネントは、予約された U \ V コンポーネントを共有します。

ビデオコーデック技術の基礎知識 ビデオフォーマットからフレームフォーマットまで

下の図は YUV420 のサンプリングを示しています。YUV422 のサンプリングは、ラインごとに間隔を置いて実行されます。つまり、隣接する 2 つのピクセルは 1 つのピクセルの U\V コンポーネントのみを取得し、次のラインはすべての U\V コンポーネントを破棄します。さらに、各ピクセルは元のサイズの 2/2 を占めると計算できます。したがって、YUV420 は YUV444 の 1/2 のサイズです。U/V コンポーネントを復元する方法は、2x2 マトリックスが U/V コンポーネントを共有して保持することを除いて、YUV422 と似ています。

ビデオコーデック技術の基礎知識 ビデオフォーマットからフレームフォーマットまで

この設計アプローチは巧妙です! 前述のように、「人間の目は紫外線に対して最も敏感ではないので、紫外線に対する感度を大幅に高めることが可能です。」

UV チャネルの値を比例的に圧縮します。画像の場合、隣接するピクセル領域の色と彩度は一般に非常に近いため、2x2 マトリックスを基本単位として使用し、U/V コンポーネントの 1 セットのみを保持するのが妥当です。

YUVの保存形式

YUV には 2 つの保存形式があります。

平面形式。つまり、すべてのピクセル ポイントの Y コンポーネントが最初に連続して格納され、次に U コンポーネント、最後に V コンポーネントが格納されます。

パック モードとは、各ピクセルの Y、U、V コンポーネントが連続的に交互に保存されることを意味します。

サンプリング方法と保存形式に応じて、いくつかの YUV 形式があります。これらは主に次の形式に基づいています。

YUV4: 2:2 および YUV4: 2:0 サンプリング

YUV4: 2:2 サンプリングに基づく一般的な形式を次の表に示します。

ビデオコーデック技術の基礎知識 ビデオフォーマットからフレームフォーマットまで

YUV4: 2:0 サンプリングに基づく一般的な形式を次の表に示します。

ビデオコーデック技術の基礎知識 ビデオフォーマットからフレームフォーマットまで

セミプレーナ モードという別の保存方法がありますが、あまり使用されていないと推定されるため、多くの記事で無視されることがよくあります。インターリーブ形式では、Y/U/V コンポーネントが一緒に保存されますが、プレーナ形式では、Y/U/V コンポーネントが厳密に分離されます。セミプレーナ形式はその中間で、Y コンポーネントは個別に保存され、U/V コンポーネントはインターリーブされて保存されます。

共通フレーム名詞

フレームレート (FPS)

「フレーム レート」、FPS、Frames Per Second の正式名称。これは、1 秒あたりに送信されるフレームの数、または 1 秒あたりに表示されるフレームの数を指します。一般的に、「フレーム レート」は画像の滑らかさに影響し、比例します。フレーム レートが高いほど、画像は滑らかになり、フレーム レートが低いほど、画像はダイナミックになります。より権威のある声明: ビデオのフレーム レートが 24fps 以上の場合、人間の目はビデオを連続的に認識します。これは「視覚の残像」現象として知られています。そのため、「フレーム レートが高いほど動きが滑らかになりますが、多くの実用的なアプリケーションでは 24fps で十分です」という格言があります。

解決

「解像度」は、一般的に「画像の寸法」または「画像のサイズ」とも呼ばれます。これは、画像の 1 フレームに含まれるピクセル数を指し、1280x720 (720P)、1920x1080 (1080P) などの仕様でよく見られます。「解像度」は画像のサイズに影響し、それに比例します。つまり、解像度が高いほど画像は大きくなり、逆に解像度が低いほど画像は小さくなります。

コードレート (BPS)

「コード レート」、BPS、正式名称はビット/秒です。1 秒あたりに送信されるデータのビット数を指し、通常はキロビット/秒 (KBPS) およびメガビット/秒 (MBPS) で測定されます。この概念は、明確に説明する必要があります。

インターネットにはさまざまな意見があります。「コード レートは音量に比例します。コード レートが高いほど音量は大きくなり、コード レートが低いほど音量は小さくなります。」と考える人もいます。また、「ビット レート」が大きい、つまり単位時間あたりのサンプリング レートが大きいほど、データ ストリームの精度が高くなり、ビデオ画像がより鮮明で高品質になるという効果があります。「ビット レート」は「歪み」であると言う人もいます。しかし、著者はこれまで、1 秒あたりのデータ転送量が多いほど画像が鮮明になる理由がよくわかっていませんでした。音量についてはどうでしょうか。

フレーム レート、解像度、ビット レートの関係は次のとおりです。

理想的には、画像が鮮明で滑らかであればあるほど良いです。しかし、実際のアプリケーションでは、ハードウェアの処理能力、実際の帯域幅条件も組み合わせて選択する必要があります。フレーム レートが高く、解像度が高いということは、ビット レートが高いことを意味し、コーデックと画像処理には高い帯域幅と強力なハードウェアが必要です。したがって、「フレーム レート」と「解像度」は状況に応じて異なります。「フレーム レート、解像度、圧縮はすべてビット レートに影響します。

ソフトコーディングとハードコーディング

本質的に違いはありません。どちらもコーデック計算を実行するためにチップを使用します。違い: 基盤となるインターフェイスが異なる、命令セットが異なる、ハードウェア ドライバーが異なる

1. ソフトコーディングとハードコーディング

ソフトコーディング: CPU を使用したエンコード

ハードコーディング: CPU 以外 (例: グラフィック カード GPU、専用 DSP、FPGA、ASIC チップなど) を使用したエンコード。

2. ソフトコーディングとハードコーディングの比較

ソフトコーディング: 実装が直接的で簡単、パラメータの調整が簡単、アップグレードが簡単、ただし CPU 負荷が重く、ハードコーディングよりもパフォーマンスが低くなります。

通常、低ビット レートでハードコードされたものよりも品質は向上します。

ハード エンコーディング: パフォーマンスは高いが、通常、低ビット レートではソフト エンコーダーよりも品質が低くなりますが、一部の製品は GPU ハードウェア プラットフォームに移植されています。

3. プロセスの違い

ハードウェアソフトコーディング:読み取り(ffmpeg)->デコーダー(NVIDIA cuvid)->エンコーダー(ffmpeg)

ソフトウェアハードコーディング:読み取り(ffmpeg)->デコーダー(ffmpeg)->エンコーダー(ffmpeg)

ソフトウェアハードコーディング:読み取り(ffmpeg)->デコーダー(ffmpeg)->エンコーダー(NVIDIA cuvid)

元は www.forlinx.net で公開されています。

www.forlinx.net