質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

4811閲覧

OpenCV 動画撮影時間

raspypy

総合スコア247

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/04/16 01:20

編集2020/04/17 07:16

##やろうとしていること
OpenCV + Wevbカメラを使用して動画を撮影。

##困っていること
撮影された動画を確認すると、実際の時間より早く撮影されています。(早送りのような動画)
実際の時間と同じ時間で撮影する方法が分かりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

VideoWriter で設定する FPS は動画を出力する際の FPS です。
つまり、ビデオプレイヤーが再生するときの FPS です。
25FPS で実際より早く再生されるということは、カメラの撮影 FPS が25より低い値なのだと思います。
カメラの撮影 FPS は VideoCapture のプロパティを取得することで確認できます。

python

1print(cap.get(cv2.CAP_PROP_FPS))

これと同じ値を VideoCapture に設定すれば、おそらく、撮影 FPS と同じ速度で再生できるようになると思います。

追記

すいません。質問内容を勘違いしてました。
撮影するループ内にほかの処理が入って FPS が低くなってしまうということであれば、まずその処理を含めてループを回したときにどのくらいのFPSが出るのか計測し、その FPS を VideoWriter に設定して、ループ内では 1 / FPS - 処理にかかった秒 分だけスリープすればよいと思います。

python

1import time 2import cv2 3 4filepath = "vtest.avi" 5cap = cv2.VideoCapture(filepath) 6 7FPS = 10 8while True: 9 start = time.time() 10 ret, frame = cap.read() 11 if not ret: 12 break 13 sleep_secs = 1 / fps - (time.time() - start) 14 assert sleep_secs > 0 # マイナスになるようなら、FPS はもっと低い値にする 15 time.sleep(sleep_secs)

投稿2020/04/16 01:32

編集2020/04/16 01:50
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

raspypy

2020/04/17 07:17 編集

回答ありがとうございます。 fps =10 (1/10 =0.1)でなければ、この値がプラスにならない。 →つまり、実際の時間より早く撮影されてしまう。ということでしょうか。
tiitoi

2020/04/16 02:20 編集

1/0.09=11FPS なので、その性能のパソコンでは最速でも11FPS以上の速度で撮影、検出処理することはできないということです。 なので、例えば、VideoWriter の FPS を 10 に設定し、0.1 秒 - 処理にかかった時間分だけ sleep すれば、ほぼ実際の時間と同じ速さで動画が保存できるのではないでしょうか。
raspypy

2020/04/17 07:17 編集

度々申し訳ございません。 fpsが大きいと、トータルフレーム数が多くなるのですが、なぜ10fpsより速くなるのでしょうか。
tiitoi

2020/04/16 03:05

> なぜfpsの値が大きいほうが、実際の時間より速くなるのかが理解できておりません。 VideoWriter に設定した FPS は動画のプロパティとしての FPS です。 動画は複数枚の画像 (フレーム) で構成されています。 再生プレイヤーは1秒間に何枚の画像をコマ送りにすればいいのかを判断するために動画のプロパティである FPS を参照します。 実際にはカメラから1秒間に10フレームしか保存できていないのに、VideoWriter で 30FPS として保存して、再生プレイヤーが30FPSで動画を再生したら、3秒間分のフレームを1秒間に再生することになるので結果的に早送りと同じになります。
tiitoi

2020/04/16 03:07 編集

120フレームあったとして、 10FPS なら1秒間に10枚コマ送りにするということなので、全部で12秒で再生されます。 30FPS なら1秒間に30枚コマ送りにするということなので、全部で4秒で再生されます。 カメラで保存したときの FPS と一致しないと、再生したときに実際より早いまたは遅いということになります。 これで伝わりますでしょうか?
raspypy

2020/04/16 03:41

ありがとうございます。 とても理解しやすく、助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問