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

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

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

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

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

Q&A

解決済

1回答

3234閲覧

動画の再生速度を変更できるプログラムの作成

prog_tamaza

総合スコア14

OpenCV

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

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

0グッド

0クリップ

投稿2022/06/22 03:57

編集2022/06/22 05:17

キーボード入力によって動画の再生速度(フレームレート)を変更するプログラムを作りたいです。
具体例としては、ディスプレイに動画ファイルを表示・再生しながら矢印上下キーを入力することで再生速度を速くする・遅くするといった処理が行えるようにしたいです。

初心者ですが、扱っている言語等はC++,Python,OpenCV,Javaです。
ヒントとなるプログラムなどあれば教えていただきたいです。

(追加)
現状のpythonで作成したコードです。エラーは出ないですが、キーボード入力してもFPSは変わらず再生されてしまいます。

Python

1#ライブラリのインポート 2import cv2 3 4#VideoCaptureオブジェクトを取得 5cap = cv2.VideoCapture("test.mp4") 6#FPSを取得 7fps = cap.get(cv2.CAP_PROP_FPS) #デフォルト20fps 8print("FPS:", int(fps)) 9 10#動画の表示 11while (cap.isOpened()): 12 #フレーム画像の取得 13 ret, frame = cap.read() 14 #画像の表示 15 cv2.imshow("Image", frame) 16 #キー入力 17 key = cv2.waitKey(10) 18 if key == ord('a'): 19 cap.set(cv2.CAP_PROP_FPS, 5) #5fpsに変換 20 if key == ord('b'): 21 break 22 23cap.release() 24cv2.destroyAllWindows()

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

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

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

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

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

can110

2022/06/22 04:01

現状できているまでのコードを提示ください。 たとえばまずは動画を等速で再生、表示はできますでしょうか?
prog_tamaza

2022/06/22 05:19

>can110さん 質問の情報量が少なく申し訳ありませんでした。コードを追加いたしました。 等速での再生はできています。加えてキーボード入力('a')によってFPSを変更する処理を書いたつもりなのですが、再生速度は変わらないままです。
prog_tamaza

2022/06/22 05:22 編集

>melianさん ソフトウェアの活用は考えていませんでした。プログラミングで解決が難しそうであれば検討させていただきます。ありがとうございます。
prog_tamaza

2022/06/22 05:57

思っている実装とは異なりますが、waitkey(数値)の数値をキーボード入力で変更することで再生速度を変更することができました。他の良い解決案があればお待ちしています。
yominet

2022/06/22 06:29

その実装(考え方)で合っています。 動画ファイルから取り出せるFPSは、 「この数字で再生されることを想定して保存されています。  これを参考にあなたのアプリで調節して表示してください」という情報。 #なので、変更できたとしても意味がありません。 表示タイミングに関係なく、先に数~全フレームを取り出して別のバッファに保存してから、 表示することだって可能ということです #たとえば、動体検知など、フレーム間の差を比較しながら表示するなどは、こういう流れになる。
prog_tamaza

2022/06/23 05:21

>yominetさん コメントありがとうございます. バッファを使った処理はとても有益な情報でした. ありがとうございます.
guest

回答1

0

ベストアンサー

まず、カメラではなくファイル再生時はフレームレート指定はできないようです。
提示コードでのcap.setの結果もFalseになっているはずです。
実際の再生速度は処理ループの回転速度に依存します。すなわち高回転すれば高速に再生されます。
よって再生速度を制御するには処理ループの速度を制御すればよいです。
簡易的にはtime.sleepでウェイトをかけるとよいでしょう。
より精密に制御するには過去の表示時刻と今回時刻の差分をとるなどする必要があります。
以下、簡易的な方法によるサンプルです。

参考:Python, OpenCVで動画再生時のFPS(フレームレート)を測定・表示

Python

1import cv2 2import time 3 4cap = cv2.VideoCapture("test.mp4") 5 6fps = cap.get(cv2.CAP_PROP_FPS) 7fps = int(fps+0.5) # 簡易丸め 8if fps <= 0: 9 fps = 60 10 11#動画の表示 12while (cap.isOpened()): 13 14 # 一時停止中(fps=0)でなければ次を読込 15 if fps > 0: 16 ret, frame = cap.read() 17 if not ret: 18 break 19 20 #画像の表示 21 cv2.imshow("Image", frame) 22 23 #キー入力 24 key = cv2.waitKey(10) 25 if key == ord('b'): 26 break 27 28 # 低速に 29 if key == ord('a'): 30 fps -= 1 31 # 高速に 32 elif key == ord('s'): 33 fps += 1 34 # 一時停止 35 elif key == ord('p'): 36 fps = 0 37 38 fps = max(fps, 0) 39 40 if fps > 0: 41 time.sleep(1/fps) 42 43cap.release() 44cv2.destroyAllWindows()

投稿2022/06/22 06:03

can110

総合スコア38268

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

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

prog_tamaza

2022/06/23 05:25

求めていた処理にかなり近いプログラムでした. 動画だとFPS指定できないのは残念でしたが,それでも満足なプログラムができそうです. ありがとうございました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問