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

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

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

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

Q&A

1回答

2318閲覧

openCVのwebカメラの動画保存時のfps

km16

総合スコア12

OpenCV

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

0グッド

0クリップ

投稿2021/12/19 14:29

openCVを使用し、60fpsのwebカメラにうつした動画を保存しようと思ってます。whileでループ処理で1フレームずつ所得して動画にしていきますが、このループ1周がカメラの元のfpsより遅くなる場合保存した動画が実際より速くなってしまいますがどうすればいいですか?別に60fpsから変わってしまってもいいですが、実際のスピードで保存されてその時の動画のfpsが知られるように保存したいです。

python

1 2import cv2 3import numpy as np 4 5# 0=内蔵カメラ 6cap = cv2.VideoCapture(0) 7 8fps = int(cap.get(cv2.CAP_PROP_FPS)) 9w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) 10h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) 11fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') 12out = cv2.VideoWriter('output.mp4', fourcc, fps, (w, h)) 13 14while True: 15 ret, frame = cap.read() 16 cv2.imshow('frame', frame) 17 out.write(frame) 18 19 if cv2.waitKey(1) & 0xFF == ord('q'): 20 break 21 22cap.release() 23out.release() 24cv2.destroyAllWindows() 25

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

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

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

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

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

guest

回答1

0

使い勝手や正確さ(?)はともかく簡易的な方法としては,
「実際にちょっとやってみてその結果のfps値を本番で使う」というのがあるかと.
(例えば1秒とか2秒くらいの動画保存を実施してみて保存できたフレーム数から「保存できるfps」を割り出す→次にそのfpsで本番動画保存処理を開始する)


「作成した動画ファイルを後からいじくってfpsを変更する手段」を用意できるならば,単に必要な値を計測する処理を追加し,このコードとは別のところで事後にfpsを変更してしまえば良い.
(そういうことができるフリーソフトか何かを見つけてくるとか.自前コードでもう一度保存し直すという手もあるが画質劣化が問題になるかも?)


そもそもなるべく早くループを回したいなら, imshow だの waitKey だのいう余計な処理をループに含めない形を考えるべきでは.
(GUI と 処理 とでスレッド分けるとか,キャプチャと書出しも分けるとか,そういう方向)

投稿2022/01/05 05:12

編集2022/01/05 05:13
fana

総合スコア11996

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問