正直、フリーツールとか探せばもっと良いのがゴロゴロしてると思う。
仕事とか迂闊にフリーツールを入れれない環境とかで、
毎回似たようなものを作成しているので、備忘録的に記載。
第1引数にビデオソース。
→Webカメラにアクセスする際は、0-9の数字を指定。
動画ファイルにアクセスするときは、相対か絶対パスで動画ファイルを指定。
第2引数にフレームレート。
→表示する際のフレームレート。cv2.waitKey()の待ち時間を変更しているだけの手抜き処理。
第3引数に縮小率。
→吐き出すjpgファイルのサイズを変更する際に指定。
2を指定すると1/2の横縦幅の画像に。
#!/usr/bin/env python # -*- coding: utf-8 -*- ''' video2jpg.py. Usage: video2jpg.py [<video source>] [<fps>] [<resize_rate>] ''' import numpy as np import cv2 import sys print(__doc__) try: fn = sys.argv[1] if fn.isdigit() == True: fn = int(fn) except: fn = 0 print fn try: fps = sys.argv[2] fps = int(fps) except: fps = 30 print fps try: resize_rate = sys.argv[3] resize_rate = int(resize_rate) except: resize_rate = 1 print resize_rate video_input = cv2.VideoCapture(fn) if (video_input.isOpened() == False): exit() count = 0 while(True): count += 1 count_padded = '%05d' % count ret, frame = video_input.read() height, width = frame.shape[:2] small_frame = cv2.resize(frame, (int(width/resize_rate), int(height/resize_rate))) cv2.imshow('frame', small_frame) c = cv2.waitKey(int(1000/fps)) & 0xFF write_file_name = count_padded + ".jpg" cv2.imwrite(write_file_name, small_frame) if c==27: # ESC break video_input.release() cv2.destroyAllWindows()
以上。