OpenCVで動画ファイルの最終フレームを取得


press
OpenCVで動画ファイルの最終フレームを取得

OpenCVで動画ファイルの最終フレームを取得

PythonとOpenCVを使用して動画ファイルの最大フレーム数を取得する方法を解説をします。処理の確認用に取得した最大フレーム数とファイル名をソートして表示させます。

コードはGitHubリポジトリにあげています。

開発環境

PC: MacBook Pro (14, 2021)
OS: macOS Monterey 12.0.1
Python: 3.9.1
opencv-python: 4.8.0.76

import cv2
import os


def get_max_frame_count(video_file):
    cap = cv2.VideoCapture(video_file)
    if not cap.isOpened():
        print(f"Error opening video file: {video_file}")
        return 0

    frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    cap.release()
    return frame_count


def main(directory_path):
    video_info_list = []

    for filename in os.listdir(directory_path):
        if filename.endswith(".mp4"):
            video_file = os.path.join(directory_path, filename)
            max_frame_count = get_max_frame_count(video_file)
            video_info_list.append(
                {"filename": filename, "max_frame_count": max_frame_count}
            )

    sorted_video_info = sorted(video_info_list, key=lambda x: x["filename"])

    for video_info in sorted_video_info:
        filename = video_info["filename"]
        max_frame_count = video_info["max_frame_count"]
        print(f"{filename}, Max Frame Count: {max_frame_count}")


if __name__ == "__main__":
    video_directory = "video"
    main(video_directory)

結果

600.mp4, Max Frame Count: 17983
1200.mp4, Max Frame Count: 17989
1800.mp4, Max Frame Count: 17983
2400.mp4, Max Frame Count: 11805

解説

動画の最終フレームを取得する関数

def get_max_frame_count(video_file)

cap = cv2.VideoCapture(video_file)
動画ファイルを開く

if not cap.isOpened():
動画ファイルが正常に開けなかった場合はエラーを表示

frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
最大フレーム数を取得

cap.release()
動画ファイルを閉じる

ディレクトリ内の動画ファイルから最大フレームを取得

def main(directory_path)

video_info_list = []
動画ファイルを格納する空リスト用を生成

for filename in os.listdir(directory_path):
ディレクトリからファイルをリストアップして1っ件づつ処理

if filename.endswith(".mp4"):
ファイル名が.mp4で終わる場合のみ処理

max_frame_count = get_max_frame_count(video_file)
先述の関数で最大フレーム数を取得

video_info_list.append({"filename": filename, "max_frame_count": max_frame_count})
ファイル名と最大フレーム数の辞書をリストに追加

sorted_video_info = sorted(video_info_list, key=lambda x: x["filename"])
リストをファイル名でソート

for video_info in sorted_video_info:
ファイル名と最大フレーム数を一件づつ表示


株式会社ファントムへのお問い合わせ

群馬県でPythonを使ったAIやソフトウェアを開発している株式会社ファントムが運営しています。




    Related Articles

    Python

    名前に現在時刻を入れたファイルが連番かどうか判定(後半)

    名前に現在時刻を入れたファイルが連番かどうか判定(後半) 前回からの続きです。 前回は連番になっていたらまとめてリスト化しましたが、今回はまとめたファイルを動画に変換して書き出します。 コードはGitHubリポジトリにあ […]

    Posted on by press
    Flask

    PythonistaでFlaskからHello World!

    iPhoneとiPadから使えるPythonistaというアプリを使ってFlaskからHello World!する方法です。 Pythonistaはプリインストールされたモジュールが充実していて、バージョンも2.7か3. […]

    Posted on by press

    最新情報をお届けします!

    メーリングリストに登録するとファントムの最新情報をお届けします

    お客様のメールアドレスを共有することはありません