OpenCVを使って動画を作成します。

動画作成プログラムの作成

動画作成プログラム「makeimg.py」を作成します。OpenCVの動画関連のクラスについては、「OpenCV」を参照してください。
1. 11行目のVideoWriterメソッドで、動画ファイルの構造を定義します。

VideoWriter (const String &filename, int fourcc, double fps, Size frameSize, bool isColor=true)

VideoWriterメソッドのパラメータの説明
引数 説明
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」のプロパティを次に示します。

動画ファイル「ImgVideo.mp4」のプロパティ