目的
Theta Sで撮った動画から、指定フレームごとにJPEGを保存します。
(動画で撮ったはいいけど、リアルタイムで全部見るのはなかなか大変なので、短縮バージョンとしてタイムラプス動画を作ってます。)
なお、以下で切り出したjpegを、Theta+アプリでタイムラプス化すれば、グリグリできる動画となります。
なお、Theta+アプリはJPEG300枚までしかタイムラプス動画を作成できないようなので、それ以上の場合はLapse It Time Lapse Proアプリで作ってます。
参考サイト
イチから書くスキルがないのでいろんなところから借用^^; ありがとうございます。
- Python3.0環境にOpenCV3.0をインストールする
http://retrofocus28.blogspot.jp/2015/08/python3-opencv3windows.html - OpenCV3.0で動画ファイルの読み込み
http://derivecv.tumblr.com/post/73561473978
使い方
python mp42jpg.py MP4FileName [FrameInterval]
FrameIntervalは何フレームごとにJPEG保存するかを指定します。省略時は120(ThetaSの動画はほぼ15fpsだそうですので、15fps×8秒毎)フレーム毎です。
ソース
mp42jpg.py
import cv2
import os.path
import sys
interval = 120 #about 15fps*8sec
if len(sys.argv) >= 2 and len(sys.argv) <= 3:
filename = sys.argv[1]
if len(sys.argv)==3:
interval = int(sys.argv[2] )
else:
print('Usage: python %s mp4_filename [frame_interval]' % sys.argv[0])
quit()
cap = cv2.VideoCapture(filename)
max_frames = cap.get(cv2.CAP_PROP_FRAME_COUNT)
file_basename, ext = os.path.splitext(filename)
ret = cap.grab()
while(ret):
frame_count = cap.get(cv2.CAP_PROP_POS_FRAMES)
# ret, frame = cap.read()
ret, frame = cap.retrieve()
if ret :
#cv2.imshow('frame',frame)
print("frame count:%d" % frame_count)
cv2.imwrite('%s_%d.jpg' % (file_basename,frame_count),frame)
if (frame_count + interval ) > max_frames:
break;
cap.set(cv2.CAP_PROP_POS_FRAMES,frame_count+interval)
# if cv2.waitKey(1) & 0xFF == ord('q'):
# break
cap.release()
# cv2.destroyAllWindows()
上記コメントになっているimshowを実行すると、Windowに表示するようになります。