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

    仮想環境でかなり困った

    下記のdeep fakeを導入しようとしたら仮想環境作成でかなり困ったので記録しておく。 https://knowledge.sakura.ad.jp/26769/ 試したこと Docker まずdockerでpytho […]

    Posted on by EIGHT
    Python

    Pythonのdatetimeで日付や時刻を扱う

    Pythonのdatetimeで日付や時刻を扱う Pythonには日付や日時を扱うdatetimeモジュールがあります。今回はこのdatetimeモジュールを解説します。 開発環境 現在の日付を取得 現在の時刻を取得 現 […]

    Posted on by press

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

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

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