潔く銀のメモ的備忘録

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

PythonとOpenCVを用いて複数の静止画から動画に変換する

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

 

前回は、動画から静止画にするプログラムを作りました。今回は、その逆である静止画から動画にするプログラムを作成しました。こちらは、需要があるかわかりませんが作ってみたので良かったら見てください。

今回のコードは、天体写真のタイムラプス動画を作成するために自作しました。自分で作成した方が使いやすいですからね(笑)

ソースコードはコピペしてもらえると使えるようになります。使う際は、ファイルパスなどは確認してください。

  

動作環境

 

ソースコード

import cv2
import glob
import os
import shutil
import time

"""
parameta
"""
frame_size = -1  #FHD=0, 4K=1
frame_rate = 30.0  #FPS

"""
end
"""

""" size set"""
if frame_size == 0:
    #FHD Timelaps動画用
    width = 1920
    height = 1080
elif frame_size ==1:
    #4K Timelasp動画用
    width = 3840
    height = 2160
else:
    #小さめに作る
    width = 640
    height = 360

""" """


def timelaps(images):
    
    
    fourcc = cv2.VideoWriter_fourcc('m','p','4','v')
    video = cv2.VideoWriter('timelaps.mp4', fourcc, frame_rate, (width, height))
    
    
    print("動画変換中...")
    
    for i in range(len(images)):
        img = cv2.imread(images[i])
        img = cv2.resize(img,(width,height))
        video.write(img) 
        
    
    video.release()
    print("動画変換完了")
    




if __name__ == '__main__':
    
    start = time.time()
    
    images = sorted(glob.glob('images/*.jpg'))
    print("画像の総枚数{0}".format(len(images)))
    timelaps(images)

    elapsed_time = time.time() - start
    print ("処理にかかった時間は:{0}".format(elapsed_time) + "[sec]")

 

動画サイズは、パラメータを触ってもらうといくらでも変更可能です。
今回のプログラムは、天体撮影を行った際に撮れた連続写真を動画に変換するために作成したコードになりますので、FHDや4Kのサイズ設定を最初に用意しています。使用用途はそれくらいしかないのかなと少し思います・・・

 

使用環境によっては、sorted関数が作用せずに順番通りに読み込まれない場合があります。その際は、natsortedを使用するば順番通りに読み込まれると思います。

 

 

天体撮影かつプログラミングしている方は遊んでみてください(^^)