MENU

python 動画ファイルの書き出し

 

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('test.m4v', fmt, fps, size) # --- (*1)

while True:
_, frame = cap.read() # 動画を入力
# 画像を縮小
frame = cv2.resize(frame, size)
# 画像を出力 --- (*2)
writer.write(frame)
# ウィンドウ上にも表示
cv2.imshow('frame', frame)
# Enterキーが押されたらループを抜ける
if cv2.waitKey(1) == 13: break
 
writer.release()
cap.release()
cv2.destroyAllWindows() # ウィンドウを破棄

 

動画ファイルの書き出しを行うプログラム。

 

動画書き出し用のオブジェクトを生成

fmt = cv2.VideoWriter_fourcc('m','p','4','v')
fps = 20.0
size = (640, 360)
writer = cv2.VideoWriter('test.m4v', fmt, fps, size)

 

cv2.VideoWriter_fourcc()で動画コーデックの指定を行う。今回の('m', 'p', '4', 'v')を指定しており他にも様々なコーデックの指定ができる。使用するコーデックによってはvideoタグなどで再生できないものもあるので保存した動画が再生されない場合にはコーデックの変換も視野にいれるといいかも。

 

cv2.VideoWriter()では動画書き出し用のオブジェクトを生成している。

後述するがこの後の処理でここで生成したオブジェクトに各画像データを書き出して動画ファイルを作成することができる。

第一引数には保存するファイル名、第二引数には動画書き出し用のフォーマット(ファイル形式つまりコーデック), 第三引数はフレームレートつまり1秒間で見せる画像の枚数,第四引数が画面サイズ。

 

動画から画像読み込みなどループ処理

while True:
 _, frame = cap.read() # 動画を入力
 # 画像を縮小
  frame = cv2.resize(frame, size)
 # 画像を出力 --- (*2)
  writer.write(frame)
 # ウィンドウ上にも表示
 cv2.imshow('frame', frame)
 # Enterキーが押されたらループを抜ける
 if cv2.waitKey(1) == 13: break

read()で動画から画像読み込み。

write()メソッドで書き出す画像を指定して先ほど生成したオブジェクトに出力。

cv2.imshow()でウィンドウ表示。

 

カメラ、ファイルを閉じる。

writer.release()
cap.release()

writer.release()でファイルを閉じる。

cap.release()でカメラ閉じる。