Python : 動画を保存する。
カメラの撮影にて、カメラを動かすことと、画像の保存についての紹介をしましたが、
動画を保存する場合もあるので、この方法についてです。
この時をOpencvを使うなど変わらないことが多いので、
変更している部分のみ紹介します。
この部分が、動画を保存するために使うVideoWriterです。
FourCCというのは詳細はここにありますが、
使っているプラットフォームで使えたり使えなかったりするので、
XVIDでダメだったらMJPGなど別のもので試してください。
fourcc = cv2.VideoWriter_fourcc(*'XVID')
この後に書き込む変数(今回はoutという名前)を決めて、
VideoWriterの書き方としては(保存ファイル名、Fourcc(上で決めたやつ),
フレイムスピード(今回は30)、画面のサイズ(width,Height))という書き方です。
out = cv2.VideoWriter('movie.mp4',fourcc,30,(w,h))
動画をスロー再生したい場合は30の値を1にすればコマ送りになります。
このプログラムは画面で1回sを押すとmovie_1 が1になり、
動画の保存を開始します。
保存の方法はこの方法です。
out.writeのカッコ内に、保存したい画像名を入れます(今回はframe1)
if movie_i == 1:
out.write(frame1)
最後に忘れちゃいけないのは、動画をリリースして閉じること。
プログラムはなんでもそうなのですが、
開いたものは必ず閉じて終わるようにしてください。
じゃないと様々なエラーがでます。
out.release()
下記がプログラムの詳細です。
import cv2
#カメラのNoの設定、1つしかカメラがない場合は0
cap_no = 0
cap_0 = cv2.VideoCapture(cap_no,cv2.CAP_DSHOW)
w = 640
h = 480
#カメラのサイズを640 x 480ピクセルに設定
cap_0.set(cv2.CAP_PROP_FRAME_WIDTH, w)
cap_0.set(cv2.CAP_PROP_FRAME_HEIGHT, h)
#とりあえず画面横にフレーム数を表記
j = 0
#フレーム数を表記する文字のフォント
fontType = cv2.FONT_HERSHEY_COMPLEX
#保存するファイル等の設定
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('movie.mp4',fourcc,30,(w,h))
movie_i = 0
#while文にてカメラがつながっている限りは動画撮影
while(cap_0.isOpened()):
#カメラを読み込む
ret1, frame1 = cap_0.read()
#画像にフレーム数を書き込む
cv2.putText(frame1,str(j),(20,50), fontType, 2, (0, 0, 0), 2, cv2.LINE_AA)
#フレーム数の計算
j = j + 1
#画像を表示
cv2.imshow('frame1',frame1)
#movie_iが1の時、動画を保存する。
if movie_i == 1:
out.write(frame1)
#キー入力を待つqを押したら、画像表示の中止
key = cv2.waitKey(1)
#終了
if key & 0x00FF == ord('q'):
break
#画像の保存
elif key & 0x00FF == ord('s'):
#sを一回押すと動画撮影スタート
if movie_i == 0:
print('start movie')
movie_i = 1
#sをもう一度押すと動画撮影スタートお及びカメラストップ
elif movie_i == 1:
print('movie stop')
movie_i = 0
break
#カメラをリリース
cap_0.release()
#動画もリリース;ちゃんと閉じないと動画が保存されないときがあります。
out.release()
#画像をすべて閉じる
cv2.destroyAllWindows()
今までにpythonについて書いた記事はここにリンクを貼ってあります。
興味があればぜひご覧ください。