ビデオ ファイルから画像データを取得する効果的な方法を探しています。FilgraphManagerClass.GetCurrentImage()
現在、Interop.QuartzTypeLib
ライブラリからテストしています。これは私が必要とすることを行いますが、非常に遅いです。各ビデオのすべてのフレームを処理する必要があります。より良いオプションはありますか?
要件
- フレーム精度である必要があります。<-- とても重要!
- デコードされたピクセル バッファ (
int
またはの配列byte[]
)、理想的には RGB24 または RGB32 にアクセスできます。 - バッファは、リアルタイムまたはより高速に取得できます。ビデオを表示する必要はありません。ピクセルを分析するだけで済みます。
- mp4 ファイル (h264/aac) を処理します。必要に応じて、AviSynth 経由でリラップまたはフレーム サーブを実行できますが、再トランスコーディングは必要ありません。
どんな提案でも大歓迎です。
要求されたいくつかのコード:
FilgraphManagerClass graphClass = new FilgraphManagerClass();
graphClass.RenderFile(@"C:\tmp\tmp.avs");
int sz = (graphClass.Width * graphClass.Height + 10) * 4;
int[] buffer = new int[sz - 1];
次に、各フレームをステップ実行します。ループに次のようなものがあります。
graphClass.GetCurrentImage(ref sz, out buffer[0]);
//DoStuff(buffer);
graphClass.CurrentPosition += graphClass.AvgTimePerFrame;