【FFmpeg学習】H264動画エンコード形式詳細まとめ

1. オーディオとビデオの用語の説明

1. ビットレート

単位時間あたりのビデオ ファイルで使用されるデータ フローを指し、ビット レートとも呼ばれます。ビット レートが大きいほど、単位時間あたりのサンプリング レートが大きくなり、データ ストリームの精度が高くなり、ビデオ画像がより鮮明になり、画質が向上するという効果が示されます。

通常、単位は 128 kbps のように秒です。これは、1 秒間にネットワークを介して送信されるデータ量が 128k ビットであることを意味します。

2. フレームレート

ビデオが 1 秒あたりに含むフレーム数を指し、一般的な単位は fps です。

フレームレートが高いほど、単位時間あたりの画像フレーム数を意味します. 通常のビデオファイルは一般的に 25fps から 30fps の間であり、これは 1 秒間に 25 から 30 枚の画像を意味します. 一般に、ゲームに関連するフレームレートはより高くなります. 一般的に> 60fps。他のパラメータが一定の場合、フレームレートが高いほど動画やゲームの滑らかさが良くなり、逆にフレームレートが低いほど動画やゲームの滑らかさが低下し、15fpsより低いと動画やゲームの滑らかさが低下します。人間の目は一般的にそれを感じます。

3.解像度

解像度は、(長方形の) 画像の長さと幅、つまり画像の寸法です。解像度は、画像サイズに正比例して画像サイズに影響を与えます。解像度が高いと画像が大きくなり、解像度が低いと画像が小さくなります。

2. H264 動画エンコード形式

エンコード圧縮を行う理由:

ビデオ データの場合、ビデオ コーディングの主な目的はデータ圧縮です。これは、動画像のピクセル形式が膨大な量のデータを表し、ストレージ スペースと伝送帯域幅が、ストレージと伝送のニーズを完全に満たすことができないためです。たとえば、画像の各ピクセルの 3 つの色成分 RGB を 1 バイトで表す必要がある場合、各ピクセルには少なくとも 3 バイトが必要であり、解像度 1280×720 の画像のサイズは 2.76M バイトです。

同じ解像度のビデオの場合、フレーム レートが 25 フレーム/秒の場合、伝送に必要なビット レートは 553Mb/s に達します。1080P、4k、8k ビデオなどの高精細ビデオの場合、伝送ビット レートはさらに驚くべきものになります。このような量のデータは、保存にも送信にも使用できません。そのため、動画データの圧縮は避けられない選択になっています。

ビデオ情報を圧縮できる理由

ビデオ情報に圧縮できるスペースがたくさんあるのは、データの冗長性が多いためです。その主なタイプは次のとおりです。

  1. 一時的な冗長性: ビデオの 2 つの隣接するフレーム間のコンテンツが類似しており、動きの関係があります。
  2. 空間的冗長性: ビデオの特定のフレーム内の隣接するピクセル間に類似性があります
  3. コーディングの冗長性: ビデオに異なるデータが現れる確率は異なります
  4. 視覚的な冗長性: 視聴者の視覚系は、ビデオのさまざまな部分に異なる方法で敏感です。

1. 映像圧縮符号化の基礎技術

1). 予測コーディング

予測符号化を使用して、ビデオの時間領域と空間領域の冗長性を処理できます。映像処理における予測符号化は、主にイントラ予測とインター予測の 2 つに分類されます。

  • フレーム内予測: 予測値と実際の値は同じフレームにあり、画像の空間的な冗長性を排除するために使用されます; フレーム内予測の特徴は、圧縮率が比較的低いことですが、他のフレームのデータに依存せずに独立してデコードされる; 通常はビデオで すべてのキー フレームはフレーム内で予測されます。
  • フレーム間予測: フレーム間予測の実際の値は現在のフレームにあり、予測値は参照フレームにあり、画像の時間的な冗長性を排除するために使用されます; フレーム間の圧縮率予測はフレーム内予測よりも高いですが、独立してデコードすることはできず、参照後に取得する必要があります。フレーム データの後でのみ、現在のフレームを再構築できます。

通常、ビデオ コード ストリームでは、すべての I フレームがフレーム内符号化を使用し、P フレーム/B フレームのデータはフレーム内またはフレーム間符号化を使用する場合があります。

2). 変換コーディング

現在主流のビデオ コーディング アルゴリズムはすべて非可逆コーディングであり、ビデオに限定的かつ許容可能な損失を発生させることで、比較的高いコーディング効率を実現できます。情報損失の原因となる部分は、変換と量子化の部分です。量子化の前に、変換符号化によって画像情報を空間ドメインから周波数ドメインに変換する必要があります。

2. H.264 ビデオのコーディング構造

 H.264 コーデックは主に、フレーム間およびフレーム内予測 (推定)、変換 (変換) と逆変換、量子化 (量子化) と逆量子化、ループ フィルター (ループ フィルター)、エントロピー符号化 (エントロピー) の 5 つの部分に分けられます。コーディング) )。

H.264 のエンコード処理では、各フレームの H 画像が 1 つまたは複数のスライスに分割されてエンコードされます。スライスには、複数のマクロブロック(MB、マクロブロック) が含まれます。マクロブロックは、H.264 規格の基本的なコーディング ユニットであり、その基本構造には、16×16 輝度ピクセル ブロックと 2 つの 8×8 クロミナンス ピクセル ブロック、およびその他のマクロブロック ヘッダー情報が含まれます。マクロブロックをエンコードするとき、各マクロブロックは予測のために異なるサイズの複数のサブブロックに分割されます

イントラ予測で使用されるブロック サイズは 16×16 または 4×4 であり、インター予測/動き補償で使用されるブロックは、16×16、16×8、8×16、8×8、8 の 7 つの異なる形状を持つことができます。 ×4、4×8、4×4。マクロブロックまたはハーフ マクロブロックに従ってのみ動き補償を実行できる以前の標準と比較して、H.264 で採用されているより細分化されたマクロブロック セグメンテーション方法は、より高い予測精度とコーディング効率を提供します。変換コーディングに関しては、予測残差データの変換ブロック サイズは 4×4 または 8×8 です (FRExt バージョンでのみサポートされます)。サイズ 8×8 の変換ブロックのみをサポートしていた以前のバージョンと比較して、H.264 は、変換および逆変換でよく発生する不一致の問題を回避します。

 

H.264 では、シーケンス、イメージ、スライス、マクロブロック、サブマクロブロックの 5 つのレベルに分けられます。

画像エンコード後

画像のフレームが H.264 エンコーダーを通過した後、1 つまたは複数のスライスにエンコードされ、これらのスライスがロードされたキャリアはNALU です。

NALUとは?

H.264オリジナルコードストリーム(ネイキッドストリームとも呼ばれる)は次々とNALUで構成されており、その機能は ビデオコーディング層(VCL、Video Coding Layer)とネットワーク抽象化層(NAL、Network Abstraction Layer)の2層に分かれている)。VCL データは、エンコード プロセスの出力です. これは、圧縮およびエンコードされたビデオ データシーケンスを表します. ネットワーク アブストラクション レイヤー (NAL、ネットワーク アブストラクション レイヤー) は、VCL をカプセル化し、各 NALU になります。NALU の構造は次のとおりです。NAL ヘッダー + RBSP

スライスの主な機能は、マクロブロック (マクロブロック) のキャリアとして使用されることです。

スライスが作成される理由は、ビット エラーの拡散と送信を制限するためです。
ビットエラーの拡散と送信を制限するには?
各スライス(slice)は互いに独立して送信されるべきであり、あるスライスの予測(スライス(slice)イントラ予測およびスライス(inter-slice)予測)は、他のスライス内のマクロブロック(Macroblock)を参照として使用することはできません。画像。

 NALU構造

 スライスは [上記のように] スライス ヘッダーとスライス データに分割でき、スライスのデータは [以下のように] いくつかのマクロブロックに分割されます。

断片化されたデータにはマクロブロックがあり、これは実際にはピクセル データがマクロブロックに格納されている場所です。

マクロブロックは、各ピクセルの輝度とクロミナンス情報を含むため、ビデオ情報の主要なキャリアです。ビデオ デコードの主な仕事は、コード ストリームからマクロブロック内のピクセル配列を取得する効率的な方法を提供することです。
コンポーネント: マクロブロックは、16×16 輝度ピクセルと、追加の 8×8 Cb および 8×8 Cr カラー ピクセル ブロックで構成されます。各ピクチャには、いくつかのマクロブロックがスライスの形で配置されています。

上の図から、マクロブロックには、マクロブロックの種類、予測の種類、コード化されたブロック パターン、量子化パラメーター、ピクセルの輝度とクロミナンスのデータ セットなどの情報が含まれていることがわかります。

スライスには、いくつかのタイプがあります。

I スライス: I マクロブロックのみを含み、I マクロブロックは現在のスライスのデコードされたピクセルをフレーム内予測の参照として使用します (他のスライスのデコードされたピクセルはフレーム内予測の参照として使用できません)。

P スライス: P マクロブロックと I マクロブロックを含むことができます. P マクロブロックは、以前にエンコードされた画像をフレーム内予測の参照画像として使用します. フレーム内エンコードされたマクロブロックは、さらにマクロブロックに分割できます: 16×16, 16×8, 8×16 または 8×8 輝度ピクセル ブロック (および付随するカラー ピクセル); 8×8 サブマクロブロックが選択されている場合、8×8 、8×4、4 のサイズのサブマクロブロック分割に細分化できます。 ×8、または 4×4 輝度ピクセル ブロック (および付随するカラー ピクセル)。

B スライス: B マクロブロックと I マクロブロックを含めることができ、B マクロブロックは、フレーム内予測に双方向の参照画像 (現在および着信のコード化画像フレーム) を使用します。

SP スライス (P の切り替え): P および/または I マクロブロックを含む、異なるエンコードされたストリーム間の切り替えに使用されます。

SI スライス: 拡張プロファイルで必須のスイッチ. SI マクロブロックと呼ばれる特別なタイプのコード化マクロブロックが含まれています. SI も拡張プロファイルで必要な機能です.

NALU の全体構造が明らかになりました。以下は H.264 ドキュメントの写真です。

3. Iフレーム、Bフレーム、Pフレーム

DTS、PTS、GOP

  • DTS : デコードされたタイムスタンプ
  • PTS: タイムスタンプを表示
  • GOP : IBP フレーム画像の完全なセット

GOP はピクチャのグループであり、GOP は連続したピクチャのグループです。下の図に示す GOP (Group of Picture):

 GOP は通常、M = 3、N = 12 のように 2 つの数字を持ち、M は I フレームと P フレームの間の距離を指定し、N は 2 つの I フレームの間の距離を指定します。次に、現在のGOP構造は次のとおりです。

I BBP BBP BBP BB I

ピクチャ グループを増やすと、エンコードされたビデオのサイズを効果的に減らすことができますが、ビデオの品質も低下します。

上の図から、DTS と PTS の順序が一致していないことがわかります.GOP の各グループは I フレームで始まり、B フレームと P フレームが続きます.最初の I フレームの画質が比較的悪い場合は、また、GOP 内の後続の B および P フレームの画質にも影響します。

  • I フレーム (イントラ ピクチャ): ビデオ解凍アルゴリズムによって 1 つの完全なピクチャに解凍できるフレーム内符号化フレーム。
  • Bフレーム(双方向):双方向予測補間符号化フレーム、前後2フレームのデータを参照して得られたこのフレームのデータに、このフレームの変化を加えたもの
  • P フレーム: 前方予測符号化フレーム。前から取得したこのフレームのデータを参照します。

おすすめ

転載: blog.csdn.net/qq_40587575/article/details/123561005