こんにちは、潔く銀です。
大学生や大学院生の研究などで、動画を静止画にしたい方は多いと思います。調べて作るのは面倒だと思うので、今回はPythonを使用して動画を静止画に切り分けるコードを書きました。動画を切り出したい方はコピペするだけ動作します。
動作環境
- Macbook Air 2013mid
- Anaconda 4.5.11
- Python 3.6.3
- Opencv3.4.3
ソースコード
import numpy as np import cv2 import os import shutil image_dir='image_dir/' #出力先のフォルダ image_file='img_%s.jpg' movie_file='***.mp4' i=0 count = 0 cpf = 30 #cut par frame #ファイルが存在してるか確認 if os.path.exists(image_dir): shutil.rmtree(image_dir) #ファイルが存在してなかったら作る if not os.path.exists(image_dir): os.makedirs(image_dir) cap = cv2.VideoCapture(movie_file) while(cap.isOpened()): ret, frame = cap.read() if ret == False: break if count%cpf == 0: cv2.imwrite(image_dir+image_file % str(i).zfill(6), frame) # Save a frame print('Save', image_dir+image_file % str(i).zfill(6)) i += 1 count = count + 1 cap.release()
cpfは、何フレームごとに画像を切り出すかの値になります。載せているソースコードの場合は、「30フレームに1回静止画を保存する」ことになります。
30fpsで撮影することができるカメラで記録した動画をこのコードで切り分けると、1秒に1回保存することが出来ます。
全てのフレームを切り出す時は、cpf=1で実現できます。ただ、膨大なフレーム量になるので動画より容量が大きくなるので、cpfの値は使用用途によって変えることをオススメします。