aviを画像ファイル群に変換するツールを作ってみた
こんにちは松原です。
色々あって好きに使える時間ができたので、勉強などをしております。
で、作成したツールをとりあえず忘備録としてメモ。
機能はこんな感じ。
動画ファイルを画像群に変換するツールを作成しました!
— tsukuruiroiropython33 (@tsukuruiroirop1) 2021年9月18日
世の中にいくらでもあると思うけど、こういうのは自分で作っておいた方が小回りが利いて改修できて便利!
ここでは3フレームごとに画像として出力してます! pic.twitter.com/Rk09FxF2VH
画像処理に使うツールは自分で作っておいた方がいいと思います。
既存のツールにやりたい画像処理があるかわからないし、ブラックボックスが少ないのは本当に大事。
大したものでもありませんが、ソースコードをあげておきます。
import cv2 import sys import tkinter as tk import numpy as np from datetime import datetime as dt import os #参考にしたサイトhttps://rikoubou.hatenablog.com/entry/2019/01/15/174751 #グローバル変数として保持 avi_path_1 = "temp" #ウィンドウ生成 root = tk.Tk() root.title(u"avi合体") root.geometry("550x130") # テキストボックス txt1 = tk.Entry(width=80) txt1.place(x=20, y=10) ############################ #######コンバート実施関数##### ############################ def conv_avi_to_img(): #aviパス取得 avi_path = txt1.get() #直打ちするときはこっち。そのうちiniファイルとか用意して引継ぎしたい。 #avi_path = "C:/Users/nasu/Desktop/local_wk/210918_3D/avi_to_img/Hosi3a.avi" #ビデオキャプチャー取得 video = cv2.VideoCapture(avi_path) #フレーム数取得 frame_num = int(video.get(cv2.CAP_PROP_FRAME_COUNT)) #フレームレート取得(同じと想定) frame_rate = int(video.get(cv2.CAP_PROP_FPS)) #タイムスタンプ取得 tdatetime = dt.now() tstr = tdatetime.strftime('%Y%m%d_%H%M%S') #出力フォルダ作成 result_dir_path = os.getcwd() + "/result_img/" + tstr print(result_dir_path) os.mkdir(result_dir_path) #フレームループ for frame_cnt in range(frame_num): avi_width = 500 avi_height = 300 img_size = (avi_width, avi_height) print(frame_cnt) if frame_cnt % 3 == 0: #画像初期化 output_img = np.zeros((avi_width, avi_height, 3), np.uint8) #フレームの画像取得 ret, output_img = video.read() ####### 画像処理するならここ ####### ################################## #リサイズ output_img = cv2.resize(output_img, img_size) #画像保存 cv2.imwrite(result_dir_path + "/" + str(frame_cnt) + '.jpeg', output_img) print("finish!!!!!!!!!!!!!!!") ################################ #######コンバート実施関数終了##### ################################ #書き込みボタンの作成 btn = tk.Button(text='画像へ変換', command = conv_avi_to_img) btn.place(x=130, y=90) #ボタンを配置する位置の設定 root.mainloop()
こういうの、Git Hubにあげたほうがいいんだろうけどめんどくさい……
はいという訳で忘備録でした。