屏幕录制功能的 Python 实现
最编程
2024-10-18 07:20:16
...
import os
import cv2
import time
import threading
import numpy as np
from PIL import ImageGrab
from pynput import keyboard
from datetime import datetime
from moviepy.editor import VideoFileClip
flag = False
def video_record():
global name, start_time, final_time
name = datetime.now().strftime('%Y-%m-%d %H-%M-%S') # 当前的时间(作为文件名)
screen = ImageGrab.grab() # 获取当前屏幕
width, height = screen.size # 获取当前屏幕的大小
fourcc = cv2.VideoWriter_fourcc(*'XVID') # MPEG-4编码,文件后缀可为.avi .asf .mov等
video = cv2.VideoWriter(f'{name}.avi', fourcc, 20, (width, height)) # (文件名,编码器,帧率,视频宽高)
print('开始录制!')
start_time = time.time()
while True:
if flag:
print("录制结束!")
final_time = time.time()
video.release() # 释放
break
im = ImageGrab.grab() # 图片为RGB模式
imm = cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR) # 转为OpenCV的BGR模式
video.write(imm) # 写入
def on_press(key):
global flag
if key == keyboard.KeyCode.from_char('1') or key == keyboard.KeyCode.from_char('q'):
flag = True # 改变
return False # 返回False,键盘监听结束!
def video_info():
video = cv2.VideoCapture(f'{name}.avi') # 记得文件名加格式不要错!
fps = video.get(cv2.CAP_PROP_FPS)
count = video.get(cv2.CAP_PROP_FRAME_COUNT)
size = (int(video.get(cv2.CAP_PROP_FRAME_WIDTH)), int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print('帧率=%.1f' % fps)
print('帧数=%.1f' % count)
print('分辨率', size)
print('视频时间=%.3f秒' % (count / fps))
print('录制时间=%.3f秒' % (final_time - start_time))
print('推荐帧率=%.2f' % (fps * ((count / fps) / (final_time - start_time))))
def avi_2_mp4():
# 指定输入文件路径
avi_file = f'{name}.avi'
# 指定输出文件路径
mp4_file = f'{name}.mp4'
# 使用 VideoFileClip 加载 AVI 文件
video = VideoFileClip(avi_file)
# 将视频写入 MP4 文件
video.write_videofile(mp4_file, codec="libx264")
# 完成后释放资源
video.close()
# 删除原始的AVI文件
os.remove(avi_file)
def run():
th = threading.Thread(target=video_record)
th.start()
with keyboard.Listener(on_press=on_press) as listener:
listener.join()
time.sleep(1) # 等待视频释放过后
video_info()
avi_2_mp4()
if __name__ == '__main__':
run()
上一篇: 01.单箱图案设计创意
下一篇: 卡丹算法
推荐阅读
-
屏幕录制功能的 Python 实现
-
算法 - 简单查找排序的 Python 实现
-
从 opencv-python 开始学习 opencv - 利用图像界面进行绘图和鼠标交互的图形用户界面功能
-
飘动 一长段文字,实现检索功能,检索到的文字加粗加红
-
第一:C# 嵌入 Python 脚本进行图像处理并返回 C# 的构思和实现。
-
云 Lan 到家,使用 Elasticsearch 实现服务的搜索功能,使用 Canal + MQ 完成服务信息与 ES 索引的同步。
-
计算机毕业设计 基于 Flask + vue 的博客系统设计与实现 Python 毕业设计 Python 毕业设计题目 Flask 框架 Vue [含源代码 + 安装与调试]。
-
STL 中的 Priority_queue - 深入分析 C++ 中优先队列的实现原理、核心功能和基本机制。
-
计算机毕业设计 基于深度学习的短视频内容理解与推荐系统的设计与实现 Python+Django+Vue 前后端分离,附源代码 讲座 文档
-
计算机毕业设计 基于 Python 的时尚女装抖音号评论数据分析系统的设计与实现 Python+Django+Scrapy 爬虫与源代码 讲座文档