-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathscreen_record_thread.py
More file actions
79 lines (66 loc) · 2.48 KB
/
screen_record_thread.py
File metadata and controls
79 lines (66 loc) · 2.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# _*_ coding:utf-8 _*_
import time
import os
import shutil
import win32gui
from PIL import ImageGrab, Image
from PyQt5.QtCore import QThread, pyqtSignal
from moviepy.video.io.ImageSequenceClip import ImageSequenceClip
class ScreenRecordThread(QThread):
trigger = pyqtSignal(list, int, list)
def __init__(self):
super(ScreenRecordThread, self).__init__()
self.recording = True
self.area = None
self.save_path = ''
self.is_pause_for_save = True
self.recordTime = 0
self.image_list = [] # mp4 list
self.image_gif_list = [] # gif list
def run(self):
if not os.path.exists('temp'):
os.mkdir('temp')
else:
shutil.rmtree('temp')
os.mkdir('temp')
self.is_pause_for_save = True
self.recording = True
self.recordTime = 0
self.image_list = []
t = time.time()
imCursor = Image.open('res/cursor.png')
self.image_gif_list = []
while self.recording:
curX, curY = win32gui.GetCursorPos()
if self.area is None:
image = ImageGrab.grab()
image.paste(imCursor, box=(curX, curY), mask=imCursor)
else:
image = ImageGrab.grab(self.area)
image.paste(imCursor, box=(curX - self.area[0], curY - self.area[1]), mask=imCursor)
imageName = os.path.join('temp', '%s.jpg' % int(time.time() * 1e3))
image.save(imageName)
self.image_list.append(imageName)
self.recordTime = time.time() - t
# """生成gif"""
# self.image_gif_list.append(imageio.imread(imageName))
fps = len(self.image_list) / self.recordTime
self.trigger.emit(self.image_list, fps, self.image_gif_list)
class SaveMp4Thread(QThread):
trigger = pyqtSignal()
def __init__(self, list, fps, path, gif_list):
super(SaveMp4Thread, self).__init__()
self.fps = fps
self.path = path
self.list = list
self.gif_list = gif_list
# self.gif_list = gif_list[::n] # gif n倍速
# self.gif_list = gif_list[::-1] # gif n倍速倒放
def run(self):
clip = ImageSequenceClip(self.list, fps=self.fps)
clip.write_videofile(self.path) # to video
# clip.write_gif(self.path.replace("mp4", "gif")) # to gif
# """生成gif"""
# imageio.mimsave('what.gif',self.gif_list)
self.trigger.emit()
shutil.rmtree('temp')