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

    Other

    GitHub CopilotをPyCharmで使用するまでの手順

    GitHub CopilotをPyCharmで使用するまでの手順 GitHub Copilotは、プログラミングの効率を飛躍的に向上させるツールで、開発者にとって非常に便利なコーディングのサポートを提供します。本記事では […]

    Posted on by press
    Python

    Pythonで文字列をリスト化して一文字づつ処理

    Pythonで文字列をリスト化して一文字づつ処理 Pythonで文字列をリスト化して一文字づつ処理する方法です。サンプルでは一文字づつ文字をshift-jisに変換して、変換できない文字を表示します。 開発環境 ソースコ […]

    Posted on by press

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

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

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