avi合体ツールつくってみた
こんにちは松原です。
aviを縦に並べて合体するツールを作りました。
こんな感じに動きます。
avi合体ツールを作りました!!!製作時間1時間くらい!
— tsukuruiroiropython33 (@tsukuruiroirop1) 2021年7月6日
同じようなシーンを見比べるのに多分便利!! pic.twitter.com/5iVVyqchZD
いくらでも既製品があるだろうけど、このくらいなら探すより作った方が楽ですね。
突貫で作った美しさのかけらのないコードですが、忘備録もかねて公開しておきます
ちなみに参考にしたサイト様はこちら
【python/OpenCV】OpenCVで動画ファイルの読み込みと保存の方法 - ソースに絡まるエスカルゴ
import cv2 import sys import tkinter as tk import numpy as np from datetime import datetime as dt #参考にしたサイトhttps://rikoubou.hatenablog.com/entry/2019/01/15/174751 #グローバル変数として保持 avi_path_1 = "temp" avi_path_2 = "temp" #ウィンドウ生成 root = tk.Tk() root.title(u"avi合体") root.geometry("550x130") # テキストボックス txt1 = tk.Entry(width=80) txt1.place(x=20, y=10) txt2 = tk.Entry(width=80) txt2.place(x=20, y=30) ################### #######合体実施##### ################### def exe_gattai(): width = 500 height = 300 img_size = (width, height) result_size = (width, 2*height) #aviパス取得 avi_path_1 = txt1.get() avi_path_2 = txt2.get() video1 = cv2.VideoCapture(avi_path_1) video2 = cv2.VideoCapture(avi_path_2) #フレーム数取得 frame_cnt_1 = int(video1.get(cv2.CAP_PROP_FRAME_COUNT)) frame_cnt_2 = int(video2.get(cv2.CAP_PROP_FRAME_COUNT)) #フレームレート取得(同じと想定) frame_rate = int(video2.get(cv2.CAP_PROP_FPS)) #タイムスタンプ取得 tdatetime = dt.now() tstr = tdatetime.strftime('%Y%m%d_%H%M%S') # 保存用 fmt = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') writer = cv2.VideoWriter('./result/' + tstr + 'result.avi', fmt, frame_rate , result_size) #フレームループ for frame_cnt in range(max([frame_cnt_1, frame_cnt_2])): print(frame_cnt) #画像初期化 frame1 = np.zeros((width, height, 3), np.uint8) frame2 = np.zeros((width, height, 3), np.uint8) if frame_cnt < frame_cnt_1: ret1, frame1 = video1.read() if frame_cnt < frame_cnt_2: ret2, frame2 = video2.read() #リサイズ frame1 = cv2.resize(frame1, img_size) frame2 = cv2.resize(frame2, img_size) #画像の結合 iframe_output = cv2.vconcat([frame1, frame2]) ### ここに加工処理などを記述する ### writer.write(iframe_output) print("finish!!!!!!!!!!!!!!!") #書き込みボタンの作成 btn = tk.Button(text='合体', command = exe_gattai) btn.place(x=130, y=90) #ボタンを配置する位置の設定 root.mainloop()
機能はみたままです。
それではまた今度。