Ubuntu 16.04にOpenCVとFFmepgをインストールした環境を用いました。詳細は以下の記事を参照してください。
動画を読み込む
OpenCVのVideoCapture
をつかって動画を読み込むことができます。
import cv2 infile = 'in.mp4' video = [] cap = cv2.VideoCapture(infile) while(cap.isOpened()): ret, frame = cap.read() if ret: video.append(frame) else: break cap.release()
配列のshapeは(frame, height, width, ch)
となります。numpy.array
に変換して確認することができます。
import numpy
numpy.asarray(video).shape
注意点
FFmpegがないと読み込むことができませんが、不親切なことにFFmpegがなくてもエラーも警告も発生しませんでした。cap.isOpened() == False
となりvideo
は空の配列のままになっていました。
動画を書き込む
動画を書き込むときは、VideoWriter
を使います。
outfile = 'out.avi' fps = 30.0 codecs = 'H264' frames, height, width, ch = video.shape fourcc = cv2.VideoWriter_fourcc(*codecs) writer = cv2.VideoWriter(outfile, fourcc, fps, (width, height)) for i in range(frames): writer.write(video[i]) writer.release()
インストールした環境では、codecをH264、出力ファイルの拡張子をaviにすると動作しました。(拡張子がmp4だとうまくいかなかったです)
指定できるcodecのリストはfourcc.orgにあります。