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

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

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

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Python

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

Q&A

解決済

2回答

2227閲覧

pythonで動画を10分ごとに分ける

monkey1

総合スコア2

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Python

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

0グッド

0クリップ

投稿2022/01/09 14:24

編集2022/01/09 14:53

python

1import cv2 2import numpy as np 3 4cap = cv2.VideoCapture(0) 5 6#保存 7fmt = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') 8fps = 20.0 9size = (640, 360) 10writer = cv2.VideoWriter('outtest.m4v', fmt, fps, size) 11 12while True: 13 _, frame = cap.read() 14 frame = cv2.resize(frame, size) 15 16 #保存 17 writer.write(frame) 18 19 cv2.imshow('frame', frame) 20 #Enterキーで終了 21 if cv2.waitKey(1) == 13: 22 break 23 24#保存 25writer.release() 26cap.release() 27cv2.destroyAllWindows() 28```pythonで動画を撮り続けるプログラムがあります。 29長時間の録画をした場合、1つのファイルだと障害が起きたときに全て無駄になってしまうため、10分ごとにファイルを分けて保存するようなプログラムが作りたいです。 301、10分経ったらループを抜ける 312、その処理を繰り返す 32というのをやろうと思っていますが、うまくいきません。 33その他の方法でも良いのでわかる方教えて欲しいです。

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

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

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

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

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

guest

回答2

0

コードがないので具体的な方法を提案できませんが、ループを抜けずにtimeなどを使用してループの中で10分経ったら保存する方がいいのではでしょうか?

追記
とりあえず10秒で書いてみました。
若干のずれはありますが、約10秒でファイル名を日時にして保存できると思います。

python

1import datetime 2import cv2 3 4cap = cv2.VideoCapture(0) 5 6# 保存 7fmt = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') 8fps = 20.0 9size = (640, 360) 10writer = cv2.VideoWriter('outtest.m4v', fmt, fps, size) 11 12backup_time = 10 # sec 13time = 0 # init 14 15# backup model 16now = datetime.datetime.now() 17s_now = now.strftime('%Y-%m-%d-%H-%M-%S') 18back_up = cv2.VideoWriter(f'{s_now}.m4v', fmt, fps, size) 19 20while True: 21 # fps*time = sec 22 if time >= backup_time*fps: 23 back_up.release() 24 now = datetime.datetime.now() 25 s_now = now.strftime('%Y-%m-%d-%H-%M-%S') 26 back_up = cv2.VideoWriter(f'{s_now}.m4v', fmt, fps, size) 27 time = 0 28 time += 1 29 30 # fram 31 _, frame = cap.read() 32 frame = cv2.resize(frame, size) 33 34 # 保存 35 writer.write(frame) # original 36 back_up.write(frame) # back_up 37 cv2.imshow('frame', frame) 38 39 # Enterキーで終了 40 if cv2.waitKey(1) == 13: 41 break 42 43# 保存 44writer.release() 45cap.release() 46cv2.destroyAllWindows() 47 48

投稿2022/01/09 14:31

編集2022/01/09 19:20
kyokio

総合スコア560

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

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

monkey1

2022/01/09 14:42

import cv2 import numpy as np cap = cv2.VideoCapture(0) #保存 fmt = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') fps = 20.0 size = (640, 360) writer = cv2.VideoWriter('outtest.m4v', fmt, fps, size) while True: _, frame = cap.read() frame = cv2.resize(frame, size) #保存 writer.write(frame) cv2.imshow('frame', frame) #Enterキーで終了 if cv2.waitKey(1) == 13: break #保存 writer.release() cap.release() cv2.destroyAllWindows() 他にも色々な機能がついてますが、とりあえずこのコードにつけたしたいです。
monkey1

2022/01/09 14:45

そんなやり方もあるんですね!教えて欲しいです。
kyokio

2022/01/09 14:46

ありがとうございます。 インデントがぐちゃぐちゃになってしまているので、質問を編集してコードとして載せていただけると親切かと思います。
monkey1

2022/01/09 14:53

すみません。今編集しました!
monkey1

2022/01/09 15:30

何か解決方法があれば教えてください。
kyokio

2022/01/09 17:52

一番上の回答にコードを載せました。 若干の誤差がありますが10秒ごとファイル名を日時にして保存するようにしています。
monkey1

2022/01/09 17:59

ありがとうございます! やってみたのですが、10秒の方の動画のみ再生することができませんでした。
kyokio

2022/01/09 18:02

どれくらい実行しました? 僕の環境では実行できました。
monkey1

2022/01/09 18:03

あとは、10秒の動画をループさせると良いですか?
monkey1

2022/01/09 18:04

1分ほど実行したところ、outtest.m4vというファイルは1分間再生されたのですが、時刻名ファイルの方が再生されませんでした。
monkey1

2022/01/09 18:06

もしサイト参考していたら、サイト名も教えて欲しいです。
kyokio

2022/01/09 18:11

back_up = cv2.VideoWriter(f'{s_now}.m4v', fmt, fps, size) のf'{s_now}.m4v'をsample.m4vにして20秒ほど実行するとどうなりますか? 時間指定ごとに保存するのに関しては参考サイトはなくやってみました。 時間を設定して保存するのに関しては下記サイトを参考にしました。 https://teratail.com/questions/224082
monkey1

2022/01/09 18:31

なぜか再生されないです。。 両方一緒の拡張子なんですけどouttest.m4vの方だけ再生できます。
kyokio

2022/01/09 18:34

1分実行した時、日付のファイルはいくつ保存されてました?
monkey1

2022/01/09 18:57

1つです なので10秒の動画は1つしか保存できてないと思います 日付ファイル1つとouttest.m4vのファイル1つです
kyokio

2022/01/09 19:20

コード間違えてました。 修正したので実行してみてください
monkey1

2022/01/09 19:48

できました!!! ほんとうにありがとうございます。 新しいコードはどのサイト使いましたか?
kyokio

2022/01/09 19:50

参考サイトはさっきはったものです。 それ以外はmonkey1さんのを少し変えただけです。 今回の間違えはif分の条件で条件に一致しないようになっていたので訂正しました。
monkey1

2022/01/09 20:12

丁寧にありがとうございます! 困っていたので助かりました!
kyokio

2022/01/10 08:41 編集

お疲れ様です。
guest

0

自己解決

できました!!!
ほんとうにありがとうございます。

投稿2022/01/10 06:35

monkey1

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問