Python

Pythonで動画から毎秒のフレームを抽出する

動画からのフレーム抽出

以前の記事で画像のパターンマッチングを試しました。

Pythonで画像のテンプレートマッチングしてみるテンプレートマッチングで何ができる? テンプレートとして与えた画像に近い領域を別の画像から発見することができます。 今回はPytho...

このような画像に対するアルゴリズムを動画に適用することを考える際、動画から画像を生成するという手順を踏むことが考えられます。

この記事では動画から1秒おきにフレームの抽出を行います。

環境

使用したPythonとライブラリのバージョンは以下になります。

Python 3.8.12
opencv-python 4.5.5.62

使用データ

いらすとや様のハエホールケーキのイラストを動画に加工して使用しました。

コード

下記により抽出を行いました。

import cv2

capture = cv2.VideoCapture("./bug.mov") # 動画へのパス
fps = capture.get(cv2.CAP_PROP_FPS)
count = 0  # フレーム用カウンタ

while True:
    ret, frame = capture.read()
    if not ret:  # 読み込めなかった場合はループを抜ける
        break
    if int(count % fps) == 0:  # 1秒ごとにフレームを保存
        path_num = int(count // fps)
        cv2.imwrite(f"./images/{path_num:02}.png", frame)
    count += 1

 

実行結果

0秒目(images/00.png)

1秒目(images/01.png)

2秒目(images/02.png)

終わりに

今回は動画からフレーム抽出を行いました。

うまくフレームを取り出せたのでテンプレートマッチングも適用できそうですね。

Y.N
GRIでデータ分析やアルゴリズム開発、ForecastFlowの開発に携わっています。