3

ビデオからさまざまなフレームを処理するビデオ分析プログラムがあります。(数時間) ビデオは MP4 になる可能性がありますが、今後は他の形式になる可能性があります。

現時点では、要求された時間に個々のフレームを抽出するために、ffmpeg 呼び出しの周りに C# ラッパーがあります。(私はffmpeg.exeバイナリを使用しています。ライブラリを直接使用していません)現時点では、これはすべて機能します。しかし、それは遅いです。非常に遅い。

抽出したフレームを処理中に RAM ディスクに保存することで、速度を向上させる方法を見つけました。保存画像フォーマットの変更など...

個々のフレームを引き出す方法を誰かが考えられるかどうかを確認したかっただけです。一瞬の精度で。これはおそらくDShowなどで可能であることはわかっています...以前に使用したことがあるFFMPEGに直行しました。しかし、DShow の方が高速である可能性が高い場合は、喜んで変更します。

4

2 に答える 2

1

Windowsには、メディアファイルを処理するためのネイティブAPIがあり、特にメディアファイルから読み取ることができます。

  • DirectShow
  • Media Foundation

どちらも、MP4(H.264ビデオ)、サードパーティのMP4デマルチプレクサおよびH.264デコーダーによって拡張されたフレームワークとしてのDirectShow(必要に応じて、Windows 7がビルドを提供します)、およびMediaFoundation(ネイティブまたはサードパーティの拡張機能によって拡張)のサポートを提供しますOSのバージョンによって異なります。

どちらも、オープンソースラッパーのDirectShow.NETとMediaFoundation.NETを介して.NETからそれぞれインターフェイスできます。これは、個々のフレームに対してFFmpegCLIよりもはるかに高速に機能します。また、プロセスの起動/初期化のオーバーヘッドは言うまでもなく、特定の時間を見つけて過度の重複作業を行うことなく、フレームを段階的に取得できることにも注意してください。または、ラッパーを介してFFmpeg / LibavバイナリをC#に使用して、同様のパフォーマンスを得ることができます。

于 2013-01-23T11:50:07.583 に答える
0

オフセット パラメータの位置を変更できます。ビデオに有効なメタデータが含まれている場合、ビデオをより速くシークできる場合、順序は速度にとって重要です。

入力ファイルの前にオフセットを置くと、オフセットはビットレートで計算されますが、(可変ビットレートの場合) 毎回正確ではありませんが、はるかに高速です。正しい方法は、ビデオをウォークスルーすることですが (offset パラメーターは入力ファイルの後にあります)、これには時間がかかります。

于 2013-01-21T17:57:33.097 に答える