OpenCVを使って動画を作成します。
動画作成プログラムの作成
動画作成プログラム「makeimg.py」を作成します。OpenCVの動画関連のクラスについては、「OpenCV」を参照してください。
1. 11行目のVideoWriterメソッドで、動画ファイルの構造を定義します。
VideoWriter (const String &filename, int fourcc, double fps, Size frameSize, bool isColor=true)
引数 | 説明 |
---|---|
filename | 書き出すファイル名 |
fourcc | コーデックを指定するための関数(4つの文字を引数に取ります) |
fps | 動画像のフレームレート(=1秒あたりのフレーム数) |
frameSize | 動画像の縦横サイズ |
isColor | カラーの動画像ファイルとして書き出すかを指定する |
2. 24-26行目で作成したデータを静止画として一旦書き出し、それを読み込んでビデオデータに追加します。
makeimg.py
import os import cv2 import numpy as np IMG_SIZE_h = 60 # 画像サイズ IMG_SIZE_w = 30 # 画像サイズ BLOCK_SIZE_h = 6 # 黒ブロックサイズ BLOCK_SIZE_w = 3 # 黒ブロックサイズ # fourcc = cv2.VideoWriter_fourcc('m','p','4', 'v') video = cv2.VideoWriter('ImgVideo.mp4', 0x00000020, 20.0, (IMG_SIZE_w, IMG_SIZE_h)) for h in range(0, IMG_SIZE_h, BLOCK_SIZE_h): for w in range(0, IMG_SIZE_w, BLOCK_SIZE_w): # IMG_SIZE_h, IMG_SIZE_wの白塗り画像作成 img = np.empty((IMG_SIZE_h, IMG_SIZE_w)) img.fill(255) # 黒ブロックを白塗り画像に書き込み img[h:h+BLOCK_SIZE_h,w:w+BLOCK_SIZE_w] = np.zeros((BLOCK_SIZE_h, BLOCK_SIZE_w)) # 画像出力 cv2.imwrite('work.png', img) img = cv2.imread('work.png') video.write(img) video.release()
※備考
次のように、VideoWriterメソッドのパラメータに変数を与えると、
fourcc = cv2.VideoWriter_fourcc('m','p','4', 'v') video = cv2.VideoWriter('ImgVideo.mp4', fourcc, 20.0, (IMG_SIZE_w, IMG_SIZE_h))
次の警告メッセージが表示されます。ただし、動画ファイルは正常に作成されます。
OpenCV: FFMPEG: tag 0x7634706d/'mp4v' is not supported with codec id 13 and format 'mp4 / MP4 (MPEG-4 Part 14)' OpenCV: FFMPEG: fallback to use tag 0x00000020/' ???'
動画作成プログラムの実行
次のコマンドで、動画作成プログラム「makeimg.py」を実行します。
$ python3 makeimg.py
次の動画ファイル「ImgVideo.mp4」が作成されます。
動画ファイル「ImgVideo.mp4」のプロパティを次に示します。