使用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
廣告