使用Python创建屏幕录制器



使用此屏幕录制器代码,可以录制计算机桌面,然后使用Python语言将录制内容保存为视频。此工具使用不同的库,例如用于捕获屏幕的**pyautogui**,用于写入和显示视频的**cv2**以及用于图像处理的**numpy**。最终结果是一个原始视频文件,以每秒60帧的帧率记录10秒的实时屏幕活动。

所需库

  • **PyAutoGUI** − 此库用于截取屏幕截图。
  • **OpenCV (cv2)** − OpenCV(开放计算机视觉库)用于处理图像和写入视频文件。
  • **NumPy** − NumPy用于将图像数据处理为数组。

安装库

要安装这些库,请使用PIP运行以下命令:

pip install pyautogui opencv-python-headless numpy

创建屏幕录制器的步骤

步骤1:导入库

第一步是导入所需的库。使用以下代码语句导入库:

import pyautogui
import cv2
import numpy as np

步骤2:设置屏幕分辨率并定义视频属性

使用以下代码语句设置屏幕分辨率并定义视频属性:

screen_resolution = (1920, 1080)
video_codec = cv2.VideoWriter_fourcc(*"XVID")
output_filename = "ScreenCapture.avi"
frame_rate = 60.0
num_frames = int(frame_rate * 10)  # Capturing for 10 seconds

步骤3:初始化视频写入器

使用以下代码语句**初始化视频写入器**:

video_writer = cv2.VideoWriter(output_filename, video_codec, frame_rate, screen_resolution)

步骤4:创建显示窗口

使用以下代码语句创建显示窗口:

cv2.namedWindow("Screen Capture", cv2.WINDOW_NORMAL)
cv2.resizeWindow("Screen Capture", 480, 270)

步骤5:开始捕获帧

使用循环捕获帧,使用以下代码语句:

for _ in range(num_frames):
   screenshot = pyautogui.screenshot()
   frame_array = np.array(screenshot)
   frame_rgb = cv2.cvtColor(frame_array, cv2.COLOR_BGR2RGB)
   video_writer.write(frame_rgb)
   cv2.imshow("Screen Capture", frame_rgb)

   if cv2.waitKey(1) == ord('q'):
      break

步骤6:释放资源并关闭窗口

使用以下代码释放资源并关闭窗口:

video_writer.release()
cv2.destroyAllWindows()

创建屏幕录制器的Python代码

import pyautogui
import cv2
import numpy as np

# Set the screen resolution
screen_resolution = (1920, 1080)

# Define the video codec
video_codec = cv2.VideoWriter_fourcc(*"XVID")

# Name the output video file
output_filename = "ScreenCapture.avi"

# Set the frames per second (fps)
frame_rate = 60.0

# Set the number of frames to capture
num_frames = int(frame_rate * 10)  # Capturing for 10 seconds

# Initialize the VideoWriter object
video_writer = cv2.VideoWriter(output_filename, video_codec, frame_rate, screen_resolution)

# Create a window named 'Screen Capture'
cv2.namedWindow("Screen Capture", cv2.WINDOW_NORMAL)

# Adjust the window size
cv2.resizeWindow("Screen Capture", 480, 270)

# Start capturing the screen
for _ in range(num_frames):
   # Capture the screen using PyAutoGUI
   screenshot = pyautogui.screenshot()

   # Convert the captured image to a numpy array
   frame_array = np.array(screenshot)

   # Convert the color from BGR to RGB
   frame_rgb = cv2.cvtColor(frame_array, cv2.COLOR_BGR2RGB)

   # Write the frame to the video file
   video_writer.write(frame_rgb)

   # Display the captured frame in the window
   cv2.imshow("Screen Capture", frame_rgb)

   # Stop the recording if the 'q' key is pressed
   if cv2.waitKey(1) == ord('q'):
      break

# Release the video writer object
video_writer.release()

# Close all OpenCV windows
cv2.destroyAllWindows()

输出

运行程序后,您将看到实时捕获框

Screen Recorder

关闭选项卡后,您将看到AVI文件已自动保存:

Screen Recorder

现在检查您的文件,使用您的视频播放器打开它,例如Windows Films & TV应用程序:

Screen Recorder

此代码的输出是一个名为ScreenCapture.avi的视频文件,它以每秒60帧的帧率捕获10秒的屏幕活动。您可以使用任何支持AVI格式的视频播放器观看此文件。

代码解释

1. 捕获屏幕

从本质上讲,脚本最重要的任务是写入屏幕内容。这是通过在不同时间点截取屏幕截图来完成的,这些截图包含正在考虑的应用程序。

2. 截取屏幕截图

**pyautogui**库用于捕获给定网站的屏幕截图。使用**PyAutoGUI**捕获整个屏幕或其特定部分非常简单。

3. 指定帧率

屏幕截图以指定的帧率捕获,这是存储在变量frame_rate中的值。在本例中,它设置为每秒60帧(fps)。这有助于使视频没有抖动,并使运动平滑。

4. 将屏幕截图保存为视频

如前所述,屏幕截图不是单独存储的,而是以视频文件的形式存储。这是使用cv2库(OpenCV)实现的,该库具有视频写入和处理功能。

5. 处理视频写入和显示

然后使用cv2创建一个视频文件,通常称为VideoWriter对象,用于将每个屏幕截图作为帧添加到视频中。它还控制在捕获过程中视频在窗口中的显示方式。

6. 使用NumPy处理图像数据

OpenCV无法读取**PyAutoGUI**捕获的屏幕截图,因此需要使用**numpy**库将捕获的格式转换为**OpenCV**可接受的格式。这种转换对于图像数据至关重要,以便不同的库可以共享它们。

7. 程序化录制和可视化

通过脚本,可以实现自动录制屏幕活动而无需手动录制。PyAutoGUI、NumPy、OpenCV等库使捕获屏幕并生成视频变得更容易和自动化。

8. 脚本结构

脚本使用循环在设定的时间段内(例如10秒)连续截取屏幕截图,然后使用视频转换工具将截图转换为所需格式,并写入视频文件。

9. 捕获期间显示

脚本还提供了一个窗口,用于在脚本运行过程中显示正在捕获的画面。这允许用户实时查看正在录制的內容。

10. 最终视频输出

录制完成后,脚本将所有捕获的帧存储到指定的视频文件中,从而生成一段连续的屏幕活动视频。

python_reference.htm
广告