ここでは、Python と OpenCV を使って、「動画の表示」「動画の出力」に関する方法についてまとめています。
参考
静止画(画像)の表示や保存については、「【OpenCV】画像の表示と保存」にまとめています。
OpenCV で動画を読み込む
OpenCV を使って動画を読み込むのは、とても簡単です。
標準APIである VideoCapture(<動画ファイルのパス>) を使って、次のように読み込みます。
1 2 3 4 5 6 7 8 9 |
import cv2 import sys cap = cv2.VideoCapture("sample.mp4") if cap.isOpened() == False: sys.exit() ret, frame = cap.read() print(frame.shape) # (1080, 1920, 3) |
- 1~2行目:OpenCV を含む必要なライブラリをインポートしています
- 4行目:OpenCV の API である VideoCapture() を使って動画を読み込みます
- 5~6行目:動画を正しく読込めたかどうかを isOpened() を使って確認します
- 7行目:read() を使って 1 フレームだけ読み込みます(ret は成功/失敗)
- 8行目:読み込んだフレームの情報(高さ、幅、画素値)を出力します
参考
shape や画素値については、「画像処理の基礎知識」にまとめています。
OpenCV で動画を表示
OpenCV を使って読み込んだフレームを表示してみましょう。
imshow(<表示ウィンドウのタイトル名>, <読み込んだフレームの numpy 配列>) を使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import cv2 import sys cap = cv2.VideoCapture("sample.mp4") if cap.isOpened() == False: sys.exit() while True: ret, frame = cap.read() if ret == False: break cv2.imshow("img", frame) if cv2.waitKey(30) == 27: break cv2.destroyAllWindows() cap.release() |
- 1~6行目は、前述と同じ
- 7行目:Python の while ループを使って無限ループします
- 8行目:read() を使って 1 フレームだけ読み込みます(ret は成功/失敗)
- 9行目:戻り値 ret が False の場合、ループを中断します
- 10行目:imshow() を使って読み込んだフレームを表示します
- 11~12行目:waitKey(30) で 30ms の間キーの入力を待ちます
ESCキー(27)が入力されると、ループを終了します - 14行目:release() を使って読み込んだ動画の情報を開放します
読み込んだ動画のフレームレートは考慮されません。
OpenCV で動画の出力
最後に、OpenCV を使って動画を出力してみましょう。
標準APIである VideoWriter_fourcc(<コーデック>) と、
VideoWriter(<出力パス>, <fourcc>, <フレームレート>, <幅, 高さ>) を使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import cv2 import sys cap = cv2.VideoCapture("sample.mp4") if cap.isOpened() == False: sys.exit() ret, frame = cap.read() h, w = frame.shape[:2] fourcc = cv2.VideoWriter_fourcc(*"XVID") out = cv2.VideoWriter("test.avi", fourcc, 30.0, (w, h)) while True: ret, frame = cap.read() if ret == False: break out.write(frame) cap.release() |
- 1~7行目は、前述と同じ
- 8行目:読み出したフレームから、「高さ」と「幅」を取得します
- 9行目:VideoWriter_fourcc() を使って、コーデックを指定します
- 10行目:VideoWriter() を使って、動画を書き出すためのオブジェクトを生成します
- 12~17行目:だいたい前述と同じです
16行目で write() を使って読み出した1フレームを書き出します
つまり、Python と OpenCV を使うことで、静止画から動画を簡単に作成することができます。