如何编写简易录屏脚本

wen 实用脚本 28

本文目录导读:

如何编写简易录屏脚本

  1. 主要功能与使用方法
  2. 注意事项
import cv2
import numpy as np
import pyautogui
import pyaudio
import wave
import threading
import time
import os
from datetime import datetime
# 录制参数设置
SCREEN_SIZE = (1920, 1080)  # 根据您的屏幕分辨率调整
FPS = 20.0
OUTPUT_DIR = "recordings"
AUDIO_FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
CHUNK = 1024
class ScreenRecorder:
    def __init__(self):
        self.recording = False
        self.audio_frames = []
        self.video_writer = None
        self.audio_thread = None
        self.video_thread = None
        # 确保输出目录存在
        if not os.path.exists(OUTPUT_DIR):
            os.makedirs(OUTPUT_DIR)
    def start_recording(self):
        """开始录制屏幕和音频"""
        self.recording = True
        self.audio_frames = []
        # 生成输出文件名
        timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
        self.output_file = os.path.join(OUTPUT_DIR, f"recording_{timestamp}.avi")
        # 初始化视频写入器
        fourcc = cv2.VideoWriter_fourcc(*'XVID')
        self.video_writer = cv2.VideoWriter(
            self.output_file, 
            fourcc, 
            FPS, 
            SCREEN_SIZE
        )
        # 启动录制线程
        self.audio_thread = threading.Thread(target=self._record_audio)
        self.video_thread = threading.Thread(target=self._record_video)
        self.audio_thread.start()
        self.video_thread.start()
        print(f"开始录制... ({self.output_file})")
    def stop_recording(self):
        """停止录制并保存文件"""
        self.recording = False
        # 等待线程结束
        if self.video_thread and self.video_thread.is_alive():
            self.video_thread.join()
        if self.audio_thread and self.audio_thread.is_alive():
            self.audio_thread.join()
        # 释放视频写入器
        if self.video_writer:
            self.video_writer.release()
        # 保存音频文件
        self._save_audio()
        print(f"录制完成!文件已保存: {self.output_file}")
    def _record_video(self):
        """录制屏幕视频"""
        while self.recording:
            # 截取屏幕
            img = pyautogui.screenshot()
            frame = np.array(img)
            frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
            # 写入视频帧
            self.video_writer.write(frame)
            # 控制帧率
            time.sleep(1.0 / FPS)
    def _record_audio(self):
        """录制系统音频"""
        p = pyaudio.PyAudio()
        # 查找立体声混音设备(Windows)或默认输入设备
        device_index = None
        for i in range(p.get_device_count()):
            dev_info = p.get_device_info_by_index(i)
            if '立体声混音' in dev_info['name'] or 'Stereo Mix' in dev_info['name']:
                device_index = i
                break
        if device_index is None:
            # 如果没有找到立体声混音设备,使用默认输入设备
            device_index = p.get_default_input_device_info()['index']
            print(f"使用默认输入设备: {p.get_device_info_by_index(device_index)['name']}")
        stream = p.open(
            format=AUDIO_FORMAT,
            channels=CHANNELS,
            rate=RATE,
            input=True,
            input_device_index=device_index,
            frames_per_buffer=CHUNK
        )
        while self.recording:
            data = stream.read(CHUNK, exception_on_overflow=False)
            self.audio_frames.append(data)
        stream.stop_stream()
        stream.close()
        p.terminate()
    def _save_audio(self):
        """保存音频到 WAV 文件"""
        if not self.audio_frames:
            return
        audio_file = self.output_file.replace('.avi', '_audio.wav')
        wf = wave.open(audio_file, 'wb')
        wf.setnchannels(CHANNELS)
        wf.setsampwidth(pyaudio.PyAudio().get_sample_size(AUDIO_FORMAT))
        wf.setframerate(RATE)
        wf.writeframes(b''.join(self.audio_frames))
        wf.close()
        print(f"音频已保存: {audio_file}")
# 使用示例
if __name__ == "__main__":
    recorder = ScreenRecorder()
    print("简易录屏脚本")
    print("按 Enter 开始录制...")
    input()
    recorder.start_recording()
    print("正在录制中... 按 Enter 停止录制")
    input()
    recorder.stop_recording()

主要功能与使用方法

  1. 安装依赖库: 运行前请确保已安装所需库:

    pip install opencv-python pyautogui numpy pyaudio
  2. 运行脚本: 执行后,按 Enter 键开始录制,再次按 Enter 键停止,录制的视频(AVI格式)和音频(WAV格式)会保存在 recordings 文件夹中。

  3. 配置参数

    • SCREEN_SIZE:根据您的显示器分辨率修改(如 (1920, 1080))。
    • FPS:帧率,0 是较平衡的选择。
    • 音频参数(RATECHANNELS)通常无需修改。

注意事项

  • 音频录制:脚本会优先尝试使用“立体声混音”设备录制系统音频,如果未找到,将使用默认麦克风(可能无法捕获系统声音)。
  • 性能:录屏对CPU有一定占用,如果感觉卡顿,可以降低 FPSSCREEN_SIZE
  • 停止方式:脚本通过两次 input() 实现开始/停止控制,您也可以修改为监听键盘热键(如 esc 键实现更灵活的停止)。

如果您需要更完整的功能(如添加鼠标高亮、区域选择录制、实时预览、将音频直接合成到视频中),可以在此基础上进一步扩展。

抱歉,评论功能暂时关闭!