0

AVIMuxDirectShowとFileWriterフィルターを使用して、AVI ビデオをキャプチャしようとしています。SampleGrabberの代わりにフィルターを接続するAVIMuxと、ストリームが 30 fps であることがはっきりとわかりますが、ビデオをキャプチャすると、各フレームが 4 回複製され、30 ではなく 120 フレームになります。ムービーは本来よりも 4 倍遅くなります。であり、4 つのセットの最初のフレームのみがキー フレームです。8 fps で同じ実験を試みたところ、受信した各画像について、ビデオに 15 フレームが含まれていました。15 fps の場合、各フレームを 8 回取得しました。

C++ でコードを記述し、Graph Edit Plus でテストしました。私がそれを制御できる方法はありますか?AVIMuxたぶん、フィルターにいくつかの制限がありますか?

4

1 に答える 1

0

問題に関係する可能性のあるキャプチャ形式を指定していませんが、一般的に、ファイルへの書き込み時にグラフにボトルネックがあり、ストリームが 30fps で流れ続けるのを妨げているように聞こえます。カメラは 30 fps でフレームを生成しようとしています。バッファがいっぱいになるまでバッファが再利用される限り、それは行われます。

しかし、ここでは、ファイル ライターがバッファーをディスクに取り込むためにビジーであるため、バッファーを使用できません。キャプチャ フィルタは不足しており、この状況では、キャプチャされたフレームごとに移動する「ドロップ フレーム」カウンタがインクリメントされます。AVIMux は、このカウントを使用して AVI ファイルにインジケータを挿入します。このインジケータは、「ファイルに書き込むためにここでフレームを使用できるはずでしたが、そうではありません。再生時に最後のフレームを繰り返します」と述べています。したがって、ファイルには 1 秒あたり 30 フレームのプレースホルダーが必要です。一部は実際のフレームで満たされ、一部は「ドロップ フレーム」です。

また、オーディオとビデオの同期を維持するためのグラフの基準クロックとして機能するオーディオを多重化しているかどうかについても言及していません。オーディオ ストリームも使用している場合にキャプチャが完了すると、AVIMux はビデオ ストリームのフレームレートを変更して、2 つのストリームの継続時間を等しくします。AVI ファイル ヘッダーをダンプすることで、AVIMux がビデオ ストリームのフレームレートを変更したかどうかを確認できます (または、エクスプローラーでファイルを右クリックしてプロパティを確認します)。

問題の原因を推測する必要があるとすれば、ドロップ フレーム カウントの計算にキャプチャ ドライバのバグがあり、それが AVIMux を台無しにしているに違いありません。これは別のカメラでも起こりますか?

于 2013-03-15T15:58:06.610 に答える