OpenCVで動画を読込・保存する [macOS]

macOS の Python 環境で OpenCV を使った動画の出力方法が意外と見つからなかったので,書き残しておきます.

実行環境

私の実行環境は以下の通りです.

  • MacBook Air (13-inch, 2017)
  • macOS High Sierra (Version 10.13.6)
  • Python 3.7.4

予め必要なパッケージは入れておくものとします.

tereminal
$ pip install opencv-python

拡張子とコーデック

コーデックを FourCC で指定し,ファイル名に適切な拡張子を入れて書き出せば,動画を保存,再生することができます.

今回は macOS で実行したものを紹介しますが,OS によって対応しているコーデック等は異なるので注意してください.

ちなみに,.mp4 (mp4v), .mov (mp4v) は macOS で保存,再生できました.

動画の書き出し

今回は適当に動画をモノクロにして保存するコードを書きます.

import cv2

video_capture = cv2.VideoCapture('sample.mov')

# 元動画のサイズ,FPSを取得しておく
width = int(video_capture.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = video_capture.get(cv2.CAP_PROP_FPS)

fourcc = cv2.VideoWriter_fourcc(*'mp4v')
video_writer = cv2.VideoWriter('output.mp4', fourcc, fps, (width, height))

while (1):
    retval, frame = video_capture.read()
    if retval is False:
        break

    frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    video_writer.write(frame_gray)

cv2.destroyAllWindows()
video_capture.release()
video_writer.release()

ちなみに,fourcc=-1 で実行すると対応しているコーデックの一覧を表示することができます.

最後に

コーデックの選択に誤りがあったり,フレームがうまく保存できていなかったりするとファイルが作成されても再生できないので,注意してください.

参考

OpenCV - VideoCapture / VideoWriter で動画の読み込み/書き込みを行う.| Pynote