潔く銀のメモ的備忘録

ガジェットとプログラムとか私的なメモを残してます。

OpenCVを用いて動画を切り出す(ソースコードあり)

 

こんにちは、潔く銀です。

大学生や大学院生の研究などで、動画を静止画にしたい方は多いと思います。調べて作るのは面倒だと思うので、今回はPythonを使用して動画を静止画に切り分けるコードを書きました。動画を切り出したい方はコピペするだけ動作します。

 

 

動作環境

 

 

 

ソースコード

 

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の値は使用用途によって変えることをオススメします。