前言
由与上不了学,教我们Mastercam的老师提前给我们布置了4道习题。对我们太好了,谢谢老师"text-align: center">
没办法,干就完了。
只是要求附上制作过程视频,就想到了能不能用python做个录屏的程序,于是在网上看了好多文章,发现很多都不是很好用,要不就是太麻烦(我就录个屏,不用声音,也不用控件)。最后看到了一个符合我要求的,可以去看看这里(感谢!)
不过呢,俗话说:适合自己的才是最好的。当我们用的时候,会发现录制的时间和视频播放的时间不一致,有的快了,有的慢了,所以就想出了原因与解决办法。接下来先上代码吧
需要安装的第三方库有pillow、opencv-python、numpy、pynput
上‘马'
import time,threading from datetime import datetime from PIL import ImageGrab from cv2 import * import numpy as np from pynput import keyboard def video_record(): # 录入视频 global name name = datetime.now().strftime('%Y-%m-%d %H-%M-%S') # 当前的时间(当文件名) screen = ImageGrab.grab() # 获取当前屏幕 width, high = screen.size # 获取当前屏幕的大小 fourcc = VideoWriter_fourcc('X', 'V', 'I', 'D') # MPEG-4编码,文件后缀可为.avi .asf .mov等 video = VideoWriter('%s.avi' % name, fourcc, 15, (width, high)) # (文件名,编码器,帧率,视频宽高) #print('3秒后开始录制----') # 可选 #time.sleep(3) print('开始录制!') global start_time start_time = time.time() while True: if flag: print("录制结束!") global final_time final_time = time.time() video.release() #释放 break im = ImageGrab.grab() # 图片为RGB模式 imm = cvtColor(np.array(im), COLOR_RGB2BGR) # 转为opencv的BGR模式 video.write(imm) #写入 # time.sleep(5) # 等待5秒再次循环 def on_press(key): # 监听按键 global flag if key == keyboard.Key.home: flag = True # 改变 return False # 返回False,键盘监听结束! def video_info(): # 视频信息 video = VideoCapture('%s.avi' % name) # 记得文件名加格式不要错! fps = video.get(CAP_PROP_FPS) Count = video.get(CAP_PROP_FRAME_COUNT) size = (int(video.get(CAP_PROP_FRAME_WIDTH)), int(video.get(CAP_PROP_FRAME_HEIGHT))) print('帧率=%.1f'%fps) print('帧数=%.1f'%Count) print('分辨率',size) print('视频时间=%.3f秒'%(int(Count)/fps)) print('录制时间=%.3f秒'%(final_time-start_time)) print('推荐帧率=%.2f'%(fps*((int(Count)/fps)/(final_time-start_time)))) if __name__ == '__main__': flag = False th = threading.Thread(target=video_record) th.start() with keyboard.Listener(on_press=on_press) as listener: listener.join() time.sleep(1) # 等待视频释放过后 video_info()
解决
观察代码可以发现实现录屏的方式就是不断循环获取屏幕然后写入,可以想到每循环一次就是一帧,而循环一次要多长时间就取决于运行的速度了。所以我们只要让一秒中写入的帧数(也就是1秒中循环的次数)和video中的参数帧率相等,就能获得差不多正常的速度
因此我在代码中加入了视频信息,算出了视频播放的时间和录制时间,再推算出来正常速度的帧率"text-align: center">
要按home键来正常结束程序,才会有video_info出现
然后呢!我发现老师要我们附制造过程视频,我TM也不可能发个几个几百M甚至上G的视频过去吧,老师也没时间去看吧
于是乎,我在循环中加入了‘等待5秒',这样就差不多每5秒获取1帧,推荐帧率显示0.20,当然,我不能也不会按这个速度播放,给它来个25倍(帧率为0.20*25=5,这样视频出来就又小又短了"text-align: center">
因为这里放不了AVI,所以我把最小的那个转成GIF格式放给你们看看。
不过模糊了好多,还多了一些莫名的××点点"text-align: center">
最后
总结
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。