実現したいこと
Python OpneCVで、動画(mp4)から5分間隔の300フレームの範囲で、もっとも輝度値が低い画像を抽出することを目指してます。
基本的な動作確認ができたのですが、本番のファイル(3.6GB、フレーム数429629、59.94fps)で実行すると、2つ目の画像抽出からよくわからない表示がでて、3つ目の画像抽出からエラーが発生します。
原因や対処方法がわかりましたら、教えていただけると幸いです。
発生している問題・エラーメッセージ
カーネルを開始中にエラーが発生しました [h264 @ 00000237aca8e7a0] reference picture missing during reorder [h264 @ 00000237aca8e7a0] Missing reference picture, default is 2147483647
※上のh264の二行が繰り返しずっと表示されます。
該当のソースコード
Python
1import cv2 2import sys 3import numpy as np 4 5#設定 6filepath="164927.mp4" #動画ファイル名 7timestep=17982 #静止画抽出のフレーム間隔 ※59.94fpsの場合 5分=17982 8checknum=300 #フレームチェック数 ※59.94fpsの場合 5秒≒300 9 10#ビデオの読み込み 11cap=cv2.VideoCapture(filepath) 12#読み込めているかチェック 13if cap.isOpened()==False: 14 sys.exit() 15 16count = cap.get(cv2.CAP_PROP_FRAME_COUNT) 17fps = cap.get(cv2.CAP_PROP_FPS) 18 19print("count:{}, fps:{}".format(count,fps)) 20 21for num in range(1, int(count), int(timestep)): 22 23 meana=255 24 25 for numa in range(0,checknum,1): 26 numb=num+numa 27 28 #numbを現状のフレームに設定 29 cap.set(cv2.CAP_PROP_POS_FRAMES, numb) 30 31 ret,img=cap.read() 32 grayimg=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 33 34 # 一次元配列化 35 grayimg = np.array(grayimg).flatten() 36 mean = grayimg.mean() 37 38 meanb=mean 39 40 if meanb<=meana: 41 meana=meanb 42 numc=numb 43 44 45 #numcを現状のフレームに設定 46 cap.set(cv2.CAP_PROP_POS_FRAMES, numc) 47 ret,imgout=cap.read() 48 print("{:0=8}".format(numc)+".jpg") 49 cv2.imwrite("picture{:0=8}".format(numc)+".jpg", imgout) 50 51cap.release()
回答1件
あなたの回答
tips
プレビュー