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について書いた記事はここにリンクを貼ってあります。

興味があればぜひご覧ください。