4

ビデオ圧縮に関する私の限られた (そしておそらく間違っている?) 理解は、イントラ フレームは完全に独立しているということです。つまり、イントラ フレーム (キー フレーム) のすべての画像データは、そのフレームの全体として格納されます。他のフレームのデータに依存して「描画」されるのは、次のインター フレーム (H.264 の P フレームと B フレームだと思います) です。

これらのイントラ フレームが完全に独立している場合、恥ずかしいほど並列の問題をエンコードしないのはなぜですか? N 個のプロセッサと X 個の I フレームがある場合、ソースの X/N 個のチャンクを各プロセッサに渡して個別にエンコードし、最後にそれらをすべてパッチすることができますよね? しかし、そうではないようです。または、少なくとも、これを行うことができるような種類の並列化を備えたエンコーダーは見たことがありません。私は何を理解していませんか?

4

2 に答える 2

2

最初に考慮すべきことは、イントラ フレームを配置する場所です。最適な圧縮を行うには、これを賢明に選択する必要があります。たとえば、シーンの変更を静的シーケンスの途中に優先します。最適な場所を見つけるには、生のビデオを分析する必要があります。これは、余分なパス (費用がかかります) で実行するか、エンコード時にその場で決定することができます。

したがって、ストリームをチャンクに分割するには、それを分析するために追加のパスを作成するか、任意に分割して圧縮効率をいくらか失う必要があります。

次に、この未加工のビデオをエンコードする方法を考える必要があります。どこかから圧縮プログラムにストリーミングされているか、すべてがディスク上で利用可能です。

ストリーミングの場合、ストリームのさまざまな部分にランダムにアクセスできないため、運が悪い. はい、バッファリングできますが、簡単に計算すると、これには大量のメモリが必要になるか、ディスクにバッファリングする必要があることがわかります。これは、次のポイントにつながります。

生ファイル全体をローカルに保存している場合は、一部を別のプロセスまたはスレッドに分割できます。あなたの問題がディスクアクセスになることを除いて!生の 1080p、24fps ビデオのデータ レートは、毎分約 4 GB であると考えてください。単一のプロセスでエンコードすると、生データを提供するためにディスクが大量に占有されます。それはプロセスの最も遅い部分でさえあるかもしれません (ハードドライブが非常に断片化されていない限り、おそらくそうではありません!)

ここで、4 つのプロセスが同じファイルにアクセスし、すべてが非常に高いレートで生データを取得しようとすることを考えてみましょう。このハード ドライブは、エンコーダーにデータを供給し続けることができません。弱いリンクは、低速のプロセッサではなく、低速のデータ アクセスです。

したがって、圧縮されていないビデオを保存するための本当に専門的なキットがない限り、並列エンコーディング用にさまざまなセクションを分割することはまだ実用的ではありません.

于 2010-07-22T13:38:32.627 に答える
1

あなたが正しいです。並列化により、動作が高速になります。

実際、x264 エンコーダーは並列エンコード機能を提供します。

http://www.videolan.org/developers/x264.html

于 2010-07-17T23:17:26.960 に答える