※この記事はkyoの備忘録として作成したものです。pythonのスクリプトを調べながら編集し、ひとまず目的のものが完成した状態で放置しているので、細かな部分が間違っている可能性があります。そのため、閲覧の際はその点をご了承頂いた上でお読みください。
Ca2+imagingで取得した動画を倍速にして進捗報告等で用いるためのメモ
以下、コード
- import numpy as np #numpy起動する必要あるか分からんけど、とりあえず起動
- import cv2
- # 動画を読み込み、FPSを変更して別名で保存する関数
- def m_speed_change(path_in, path_out, scale_factor, color_flag):
- # 動画読み込みの設定
- movie = cv2.VideoCapture(path_in)
- # 動画ファイル保存用の設定
- fps = int(movie.get(cv2.CAP_PROP_FPS)) # 元動画のFPSを取得
- fps_new = int(fps * scale_factor) # 動画保存時のFPSはスケールファクターをかける
- w = int(movie.get(cv2.CAP_PROP_FRAME_WIDTH)) # 動画の横幅を取得
- h = int(movie.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 動画の縦幅を取得
- fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') # 動画保存時のfourcc設定(mp4用)
- video = cv2.VideoWriter(path_out, fourcc, fps_new, (w, h), color_flag) # 動画の仕様(ファイル名、fourcc, FPS, サイズ)
- # ファイルからフレームを1枚ずつ取得して動画処理後に保存する
- while True:
- ret, frame = movie.read() # フレームを取得
- video.write(frame) # 動画を保存する
- # フレームが取得できない場合はループを抜ける
- if not ret:
- break
- # 撮影用オブジェクトとウィンドウの解放
- movie.release()
- return
- path_in = r'C:\保存する場所を指定(ダウンロード、とか)\〇〇.avi' # 元動画のパスと倍速にしたいファイルの名前
- path_out = '△△.mp4' # 倍速になった動画の名前
- scale_factor = 3 # FPSにかけるスケールファクター。ここに入力する数字で何倍速かが決まる。3にすりゃ3倍速
- color_flag = True # カラー動画はTrue, グレースケール動画はFalse
- # 動画の再生速度を変更する関数を実行
- m_speed_change(path_in, path_out, scale_factor, color_flag)
上記をjupyterなどで実行すれば、おk。
動画の保存先は、例えばjupyterで上のスクリプトを実行すればこのスクリプトが保存されているフォルダに作成される。
フレーム数とか調整しないで作成したから、少し動きがカクッとするけどそんなに気にならなかったので無視。
miniscopeから得られた生の動画のままだとコーデックの問題で、うまく行かないときもある。その辺は適宜編集系のソフトtかも使って対処する。pythonにこだわることだけが、必ずしも楽ではない。
コメント