私は、カメラ メーカー独自の API を介して特殊なカメラからビデオをキャプチャする C# プログラムを作成しました。キャプチャしたフレームを FileStream オブジェクトを介してディスクに書き込むことはできますが、フレームレートに関しては、カメラとディスク I/O に翻弄されます。
必要なフレームレートで確実にディスクに書き込む最善の方法は何ですか? リアルタイムの平均フレームレートを計算し、特定のフレームレートを維持するためにフレームを追加/破棄するアルゴリズムはありますか?
私は、カメラ メーカー独自の API を介して特殊なカメラからビデオをキャプチャする C# プログラムを作成しました。キャプチャしたフレームを FileStream オブジェクトを介してディスクに書き込むことはできますが、フレームレートに関しては、カメラとディスク I/O に翻弄されます。
必要なフレームレートで確実にディスクに書き込む最善の方法は何ですか? リアルタイムの平均フレームレートを計算し、特定のフレームレートを維持するためにフレームを追加/破棄するアルゴリズムはありますか?
情報が少ないので何とも言えません。
フォーマットは何ですか?圧縮はありますか?
カメラ API はどのようにフレームを送信していますか? カメラが要求したフレーム レートを送信するように、タイミングが設定されていますか? そうであれば、実際に I/O 速度を扱っています。
高品質が必要で、圧縮せずに書き込んでいる場合は、ロスレス圧縮アルゴリズムをいくつか試して、処理とドライブ I/O のバランスをとることができます。ボトルネックが高いドライブ I/O にある場合、速度が向上する可能性があります。
フレームの場合、それを実装する方法があります。通常、フレームにはタイムスタンプがあり、それを検索して、他のフレームに非常に近いフレームを破棄する必要があります。
60 fps が必要な場合、フレーム間のミリ秒単位のスペースは 1000/60=16 ミリ秒です。取得したフレームのタイムスタンプが最後から 13 ミリ秒である場合、それを破棄してディスクに書き込まないでください。