LoginSignup
1
2

More than 1 year has passed since last update.

Pythonで動画からフレームレートを抽出する

Last updated at Posted at 2022-10-26

目的

私が研究している人工知能では、動画からフレームレートを抽出して大量の画像データを取得しています。そのフレームレートの抽出方法をPythonを用いてここに残しておきます。

ソースコード

import cv2
import os

save_dir="./hogehoge" #抽出した画像を保存するディレクトリを記載
cap=cv2.VideoCapture("./hugehuge.MP4") #読み込む動画のディレクトリ
if not cap.isOpened():
  sys.exit()
n= 0
while True:
    is_image,frame_img = cap.read()
    if is_image:
        # 画像を保存
        outfile=save_dir+"/"+str(n)+".jpg"
        cv2.imwrite(outfile, frame_img)
    else:
        # フレーム画像が読込なかったら終了
        break
    n += 1

cap.release()
print("ok")

解説

読み込み先と保存先の指定

save_dir="./hogehoge" #抽出した画像を保存するディレクトリを記載
cap=cv2.VideoCapture("./hugehuge.MP4") #読み込む動画のディレクトリ

./hogehogeと書かれているところにはフレームレートを抽出した画像を保存するディレクトリを指定します。
./hugehuge.MP4と書かれているところは、フレームレートを読み込むMP4動画のディレクトリを指定します。


if not cap.isOpened():
  sys.exit()

エラーチェックみたいなものです。詳しくはしらないですが、動画をうまく読み込めない場合、
プログラムを終わらせるみたいな感じだと思います。(あいまいですみません)


is_image,frame_img = cap.read()

cap.read()は、フレーム画像が読み込めたかをbooleanで返す変数と、フレーム画像の配列ndarrayのタプルが返されます。
is_image,frame_imgにはそれぞれの戻り値を格納しています。
それ以降はis_imageがtrueかfalseかで条件分岐です。
画像ファイルは、各ピクセルの色の値を行列値で表すので、ndarrayで返されるというわけです。


outfile=save_dir+"/"+str(n)+".jpg"
cv2.imwrite(outfile, frame_img)

保存先としてoutfileを宣言し、抽出した画像に名前を付けます。
今回はn=0から始まる値を連番として名前付けします。
なので抽出した画像のファイル名は0.jpg~n.jpgとなります。
imwriteでは、保存したいファイル名で抽出した画像の行列を保存しています。


cap.release()
print("ok")

最後に読み込んだ動画をリリースして、フレームレートの抽出が終わったらokと出力させて確認です。

お疲れ様でした!

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2