動画ファイルの表示(Python を使用)

概要

動画ファイルを表示するプログラムの例である。OpenCV の cv2.VideoCapture で動画ファイルを開き、フレーム(動画を構成する1枚1枚の画像)を順に読み込んで表示する。あわせて、幅、高さ、フレームレート(1秒あたりのフレーム数)、再生位置を取得して表示する。動画の終わりまで来たら先頭に戻り、ESC キーで終了する

目次

関連する外部ページ

サイト内の関連情報

第1章 動作環境と準備

動作環境は Python 3.12OpenCV 5 とする。

管理者権限コマンドプロンプトを起動する (手順:Windowsキーまたはスタートメニュー → cmd と入力 → 右クリック → 「管理者として実行」)。

次のコマンドで OpenCV をインストールする。

pip install -U --no-user opencv-python

表示する動画ファイルとして、OpenCV 公式のサンプル動画 vtest.avi を使う。OpenCV のリポジトリの samples/data から入手し、プログラムと同じディレクトリに置く。別の動画ファイルを使う場合は、プログラム中のファイル名を書き換える。

第2章 動画ファイルを表示する Python プログラム

次のプログラムを実行すると、"VideoFile" という名前のウィンドウに動画が表示される。終了するときは ESC キーを押す。

import cv2

# 動画ファイルを開く
cap = cv2.VideoCapture("vtest.avi")
if not cap.isOpened():
    print("動画ファイルを開けなかった")
    exit()

# 幅、高さ、フレームレート、総フレーム数の取得
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = cap.get(cv2.CAP_PROP_FPS)
frame_count = cap.get(cv2.CAP_PROP_FRAME_COUNT)

cv2.namedWindow("VideoFile", cv2.WINDOW_AUTOSIZE)

while True:
    ret, frame = cap.read()
    if not ret:
        break

    msec = cap.get(cv2.CAP_PROP_POS_MSEC)
    index = cap.get(cv2.CAP_PROP_POS_FRAMES)

    cv2.imshow("VideoFile", frame)
    if cv2.waitKey(int(1000 / fps)) == 27:
        # ESC キー
        break

    print(f"width = {width}, height = {height}, fps = {fps}, index = {index}, msec = {msec}")

    # 終わりまで来たら最初に戻る
    if index >= frame_count:
        cap.set(cv2.CAP_PROP_POS_FRAMES, 0)

cap.release()
cv2.destroyAllWindows()

第3章 プログラムの説明