0

C++ で OpenCV ライブラリを使用してビデオをデコードして表示する方法について質問したいと思います。詳細については、2 つのフレーム間の遅延を正しく設定する方法を理解する必要があります。

毎秒 25 フレームの .mp4 ビデオがあります。

通常のサイクルを使用してフレームを取得して表示します。

while (something) {
  ...
  capture->read(f);
  imshow("video_title", f);
  waitKey(delay)
}

ここで、captureVideoCaptureオブジェクトへのポインター、fMatオブジェクトです。

遅延変数の値の設定に問題があります。

理想的には、遅延は 1000/fps に設定する必要があります。

私の場合、1000/25 = 40 です。ただし、遅延を 40ms に設定すると、ビデオの再生が遅くなります。

明らかに遅延値を変更できます。30ms を使用しても、再生はまだ遅すぎます。20ms を使用すると、必要以上に高速になります。

中間処理ステップがないため、このケースは管理が非常に簡単です。

そう:

  • 私は何を間違っていますか?
  • ビデオを正しい速度で再生するために遅延を正しく設定する方法を提案できますか?

「正しい速度」とは、オーディオとビデオの同期を維持するフレームレートを意味します。

4

1 に答える 1

1

read コマンドと imshow コマンドの実行には明らかに時間がかかるため、再生が遅くなります。前回の imshow からの経過時間を 5 ミリ秒と測定し、40-5 = 35 ミリ秒だけ待ちます。

于 2013-01-21T13:06:34.023 に答える