皆さん、こんにちは。Stop Refactoring チャンネルへようこそ。
この号では、ビデオエンコード形式 H264を紹介します。
H264 はビデオ画像に最も一般的に使用されるエンコード形式で、ほとんどすべてのプレーヤーがこのエンコード形式をサポートしており、ブラウザも例外ではありません。
H264 については次の順序で説明します。
1. エンコード形式の役割
2. Iフレーム、Pフレーム、Bフレーム、GOP
3. 利用シーン別の注意点
4. H264とH265の選択
エンコード形式の役割
前号の「オーディオとビデオのトランスコーディングの動作原理」で紹介したように、ビデオファイルは実際にはカプセル化、エンコード、基本データの3 つの層に分かれています。
カプセル化の機能については、前号の「カプセル化フォーマット」を参照してください。
エンコードの役割は、データを圧縮し、最終的なファイルのサイズを制限することです。
動画を例に挙げると、動画はフレームごとの画像で構成されており、画像フレームのサイズは基本データ形式によって決まります。動画の基本データ形式は一般に色空間モデルです。
解像度が 1920*1080、色空間モデルが YUV420 の場合、画像の 1 フレームのサイズは約 3MB です。
ビデオの長さが 1 分、1 秒あたり 25 フレームの場合、理論上のビデオ ファイル サイズは約 4 GB になります。
しかし、一般的なビデオファイルはそれほど大きくありません。ビデオはエンコード段階でデータを圧縮するため、通常、数分間の高解像度ビデオは数百メガバイトになります。
エンコード プロセスは、エンコード フォーマットによって決まります。各エンコード フォーマットは、異なる圧縮/解凍アルゴリズムに対応し、各エンコード フォーマットは、異なるエンコーダ/デコーダにも対応します。プレーヤーが特定のエンコード フォーマットをサポートしていない場合、再生できません。から。
ちなみに、一般的に、ビット レート、最大ビット レートなど、ビデオ ファイルのサイズに影響を与える基本的なパラメータのみがエンコード段階で使用されます。エンコード段階では、これらのパラメータに従ってファイル サイズが制限されますが、同時に非可逆圧縮も生成され、画質に影響を与える可能性があります。
解像度、フレーム レートなどの他の基本パラメータはエンコード段階では処理されないため、トランスコード プログラムが元のフレームの基本データを操作する必要があります。
フレーム レートを下げるなどの変更を行う場合、トランスコーディング プログラムはビデオ フレームのタイムスタンプを再計算し、冗長なフレーム データを破棄する必要があります。もちろん、FFmpeg などのフレームワークがこれらの処理インターフェイスを提供します。
Iフレーム、Pフレーム、Bフレーム、GOP
H264 は最も一般的に使用されるビデオ エンコード形式であり、ここでのビデオとは画像を指します。H264 は音声データを扱いません。
H264 の圧縮動作原理は比較的一般的で、その圧縮アルゴリズムには動き補償や動き補足などの概念が追加されています。
つまり、類似度の高い区間については、すべてのデータを記録する必要はなく、前の画像または前後の画像に基づいて現在の画像を計算することで、ファイル全体のデータが得られます。減らされる。
特定の圧縮アルゴリズムを明確にする必要はありませんが、対応する H264 の特別な概念、 I フレーム、P フレーム、B フレーム、GOPについては明確にする必要があります。
I フレームは単独で再生できる画像のフレームであり、データ量が最も多くなります。
P フレームは前の I フレームまたは P フレームに基づいて計算する必要があり、データは不完全で、データ量は I フレームよりも少なく、ビデオの大部分は P フレームです。
B フレームは前後の I フレームまたは P フレームに基づいて計算する必要があり、データが最も不完全であり、データ量が最も少ないです。
GOP はビデオ フレームの完全なセットを指します。gop が 25 に設定されている場合、エンコーダは 25 フレームごとの最初のフレームを I フレームにする必要があります。フレーム レートも 25 フレームの場合、1 秒あたりの最初のフレームは I フレームである必要があります。
利用シーン別の注意点
H264 のこれらの概念を知っていても何の役に立つのでしょうか? 一部のシナリオでは、これらの概念が重要な役割を果たします。
まず、どのようなシーンであっても、ビットレートと最大ビットレートの設定に注意する必要があります。
コード レートはデータ量に影響を与える最も直観的なパラメータであるため、最終的なデータ量のサイズが制限され、多くの場合、ストレージ容量とネットワーク帯域幅を考慮する必要があります。
ビット レート、解像度、フレーム レートなどの関連パラメータの説明と具体的な提案については、前号の「ビデオ パラメータ」を参照してください。ここでは詳しく説明しません。
次にオンライン再生の場面ですが、一般的にIフレーム、Bフレーム、Pフレーム、GOPについては特に注意する必要はありません。
ただし、アンロードされたビデオのジャンプがスムーズでないなどの問題がある場合は、ビデオの 2 つの I フレームが非常に離れている可能性があります。この問題を防ぐために、 GOP をフレームの4 ~ 5 倍に設定できます。4 ~ 5 秒ごとに I フレームが存在することを保証するレート。
ライブ ブロードキャスト シナリオでは、これらの概念に特別な注意が必要です。I フレームは独立したフレームであり、B フレームと P フレームの再生は基本的に I フレームに依存するため、ストリーミング サーバーはキャッシュ I フレームを設定する必要があります。これにより、最初の画面のぼやけの問題が軽減されます。ある程度。
ただし、画面が部分的にぼやける問題は依然として発生します。GOP も設定する必要があります。GOP は通常、 1 ~ 2 秒ごとに I フレームが存在するようにするため、フレーム レートの 1 ~ 2 倍に設定されます。この場合、GOP はフレーム レートの 1 ~ 2 倍に設定されます。 、理論的にはわずか1〜2秒であり、画面がぼやける問題は、隙間に流れが流れ始めたときにのみ発生します。
ただし、1~2秒程度のフレームはほぼ同様で、Iフレームバッファを設定していれば、部分的に画面のぼやけがあっても、それを感じないことが多い。
一般的にライブ配信ではBフレームの生成を禁止する必要があり、Bフレームはデータ量が最も少ないものの、次のフレームのデータを計算する必要があるため、Bフレームを禁止することがライブ配信のスムーズさにつながります。
H264とH265の選択
近年、H265 も人気が高まっており、同じビデオの場合、H265 でエンコードされたファイルはH264 でエンコードされたファイルよりもはるかに小さくなり、場合によっては 50% 近くになることもあります。
したがって、理論的には、同じ帯域幅の前提の下では、H265 のオンライン ビデオとライブ ストリーミングの画質が向上し、同じ画質の下では H265 の方が帯域幅/トラフィックを節約できます。
ただし、これはエンコードとデコードの計算コストに基づいています。つまり、H265 ビデオの再生はH264 ビデオよりも多くのパフォーマンスを消費します。
これが H264 と H265 の最大の違いであり、H265 は H264 よりも高い圧縮アルゴリズムを備えています。H264 と H265 の選択は、実際のシナリオにおけるユーザーおよびサーバーのパフォーマンスと比較して、容量と帯域幅のどちらがより重要であるかを考慮して決定されます。
しかし、さらに重要なのは、H265 の人気が予想ほど高くなく、すべてのブラウザが H265 をサポートしているわけではないことです。
そのため、さまざまな検討を行って H265 を選択したとしても、クライアントがサポートしていなければ機能しません。結局のところ、H264 でエンコードされたビデオはどこでも再生できますが、H265 は必ずしも再生できるわけではありません。
要約する
この号では、最も一般的に使用されているビデオ エンコード フォーマット H264 を紹介します。もちろん、H264 よりも可逆圧縮率の高いエンコード フォーマットや、H264 よりも機能的なエンコード フォーマットはありますが、人気により H264 がより一般的に使用されることが決まりました。