matlab 屏幕录像,Python 练习之 屏幕录像

import sys

import time

import os

from PyQt5.QtWidgets import *

from PyQt5 import QtGui, QtCore, QtWidgets

# from PyQt5.QtWidgets import QTableWidget, QProgressBar, QLineEdit, QComboBox, QFrame, QTableWidgetItem

from PyQt5.QtCore import *

from PyQt5.QtGui import *

# 这个test_pyqt是ui文件对应的py文件的文件名

from Ui_qt_C02 import Ui_qt_c02

from PIL import ImageGrab # pip3 install pillow

import numpy as np # pip3 install numpy

import cv2 # pip3 install opencv2

import datetime

from pynput import keyboard # pip3 install pynput

import threading

flag = False # 停止标志位

# 调用 QT 设计的界面对应的类

class WC02(QDialog):

def __init__(self, parent=None):

super(WC02, self).__init__(parent)

self.child = Ui_qt_c02()

self.child.setupUi(self)

self.child.btn_start.clicked.connect(self.start_screen)

self.child.btn_select.clicked.connect(self.sel_directory)

self.child.btn_open_path.clicked.connect(self.open_path)

# 设立函数,来取得当前时间

def get_sysdate(self):

now = time.strftime("%Y%m%d %H%M%S", time.localtime(time.time()))

# print(now)

return now

def sel_directory(self):

pass

# 打开文件有以下3种:

# 1、单个文件打开 QFileDialog.getOpenFileName()

# 2、多个文件打开 QFileDialog.getOpenFileNames()

# 3、打开文件夹 QFileDialog.getExistingDirectory()

dir_path = QFileDialog.getExistingDirectory(self, "请选择文件夹路径", "/")

# print(dir_path)

self.child.t_directory.setText(dir_path)

def video_record(self):

# """

# 屏幕录制!

# :return:

# """

name = self.get_sysdate()+'.avi' #当前的时间

t_directory = self.child.t_directory.text() #新生成文件, 要保存的文件夹

if t_directory == '':

pass

else:

new_file_name = os.path.join(t_directory, name) #新生成的文件,含路径

# print(new_file_name)

p = ImageGrab.grab() # 获得当前屏幕

a, b = p.size # 获得当前屏幕的大小

fourcc = cv2.VideoWriter_fourcc(*'XVID') # 编码格式 常用的有 “DIVX"、”MJPG"、“XVID”、“X264"

# 输出文件 帧率为16,可以自己设置

# VideoWriter(filename, fourcc, fps, frameSize[, isColor]) ->

# 第一个参数是要保存的文件的路径

# fourcc 指定编码器

# fps 要保存的视频的帧率,本例为 20fps (frame per second)

# frameSize 要保存的文件的画面尺寸,本例为 当前屏幕的大小

# isColor 指示是黑白画面还是彩色的画面

video = cv2.VideoWriter(new_file_name, fourcc, 20, (a, b))

while True:

im = ImageGrab.grab()

# CvtColor是Opencv里的 转换图像的颜色空间

# cvtColor(src, code, dst=None, dstCn=None)

# src: 原图像; code: 指定颜色空间转换类型;

# dst: 目标图像;与原图像大小深度一致;dstCn: 指定目标图像通道数;默认None,则会根据src、code自动计算;

# https://www.cnblogs.com/chenzhen0530/p/10741264.html 有说明

# 转为opencv的BGR格式

imm = cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR)

video.write(imm)

if flag:

print("录制结束!")

break

video.release()

def on_press(self, key):

# """

# 键盘监听事件!!!

# :param key:

# :return:

# """

# print(key)

global flag

if key == keyboard.Key.esc:

flag = True

print("stop monitor!")

return False # 返回False,键盘监听结束!

def start_screen(self):

pass

reply = QMessageBox.information(

self, '提醒', '准备开始录制... 按ESC 结束录制', QMessageBox.Yes, QMessageBox.Yes)

th = threading.Thread(target=self.video_record)

th.start()

with keyboard.Listener(on_press=self.on_press) as listener:

listener.join()

reply = QMessageBox.information(

self, '提醒', '已录制完毕', QMessageBox.Yes, QMessageBox.Yes)

def open_path(self):

dir_path = self.child.t_directory.text()

if os.path.exists(dir_path):

os.startfile(dir_path)

# 打开文件有以下3种:

# 1、单个文件打开 QFileDialog.getOpenFileName()

# 2、多个文件打开 QFileDialog.getOpenFileNames()

# 3、打开文件夹 QFileDialog.getExistingDirectory()

if __name__ == "__main__":

app = QApplication(sys.argv)

myc02 = WC02()

myc02.show()

sys.exit(app.exec_())

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值