今天要做的是錄製螢幕影像並將其儲存為 MP4 格式的影片文件。
screen_size = pyautogui.size()
pyautogui.size()
函數來獲取螢幕的寬度和高度,並將其存儲在 screen_size
變數中。fps = 10
duration = 10
output_filename = f"screen_recording.mp4"
fps
(每秒幀數)設定為 10,表示每秒錄製 10 幀畫面。duration
(錄影時間)設定為 10 秒,表示錄影的總時長。output_filename
是影片輸出的檔名,這裡設定為 "screen_recording.mp4"
。fourcc = cv2.VideoWriter_fourcc(*"mp4v")
out = cv2.VideoWriter(output_filename, fourcc, fps, screen_size)
cv2.VideoWriter_fourcc(*"mp4v")
用來設定格式,"mp4v"
是用於 MP4 格式。cv2.VideoWriter()
產生空的影片檔案 ( 設定格式、幀率 fps、長寬 )。參數包括:
output_filename
:輸出文件名。fourcc
:影片格式。fps
:每秒幀數。screen_size
:影片的長寬尺寸。start_time = time.time()
while True:
img = pyautogui.screenshot()
frame = np.array(img)
frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
out.write(frame)
if time.time() - start_time > duration:
break
pyautogui.screenshot()
捕獲當前螢幕的畫面,並返回一個 PIL 圖像。np.array(img)
將 PIL 圖像對象轉換為 NumPy 數組,使其能夠被 OpenCV 操作。cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
將 RGB 顏色模式的圖像轉換為 BGR 顏色模式,以符合 OpenCV 的要求。out.write(frame)
將處理過的幀寫入影片文件中。time.time() - start_time
用於檢查是否超過設定的錄影時間(duration
),如果超過則跳出循環。out.release()
out.release()
釋放 VideoWriter 對象所佔用的資源,並完成影片文件的寫入和儲存。print(f"螢幕錄影已保存至 {output_filename}")
import cv2
import numpy as np
import pyautogui
import time
# 獲取螢幕大小
screen_size = pyautogui.size()
# 幀率(fps)
fps = 10
# 錄影時間
duration = 10
# 輸出檔名
output_filename = f"screen_recording.mp4"
# 使用 cv2.VideoWriter_fourcc() 方法設定儲存的影片格式,這裡使用 'mp4v' 來保存為 MP4 格式
fourcc = cv2.VideoWriter_fourcc(*"mp4v")
# 使用 cv2.VideoWriter() 產生空的影片檔案 ( 設定格式、幀率 fps、長寬 )
out = cv2.VideoWriter(output_filename, fourcc, fps, screen_size)
# 記錄開始時間
start_time = time.time()
while True:
# 捕獲螢幕
img = pyautogui.screenshot()
# 將圖像轉換為 numpy 數組,這樣可以進行後續的 OpenCV 操作
frame = np.array(img)
# 使用 cvtColor() 方法可以改變圖片的色彩,將其從 RGB(pyautogui 默認)轉換為 BGR(OpenCV 默認)
frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
# 取得圖片的每一幀寫入到 VideoWriter
out.write(frame)
# 檢查是否超過指定的持續時間
if time.time() - start_time > duration:
break
# 釋放資源
out.release()
print(f"螢幕錄影已保存至 {output_filename}")
參考資料 :
https://steam.oxxostudio.tw/category/python/ai/opencv-write-video.html