这是一个录屏程序,可以录制屏幕和声音,并将它们合并成一个视频文件。程序使用PyQt5库创建了一个GUI界面,用户可以选择录制分辨率、帧率和录制时长。程序使用mss库来捕获屏幕截图,使用cv2库将截图转换为视频帧,并使用moviepy库将音频和视频合并。程序还使用pyaudio库录制音频。录制过程中,程序会在GUI界面上显示一个红色的圆形指示灯,表示正在录制。用户可以通过点击“开始录制”按钮开始录制,点击“停止录制”按钮停止录制。录制完成后,程序会自动将音频和视频合并,并将最终的视频文件保存在当前目录下。
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QComboBox, QPushButton, QSlider
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtGui import QPainter, QColor
from PyQt5.QtWidgets import QWidget, QLabel, QMessageBox
from PyQt5.QtCore import Qt
import cv2
import mss
import numpy as np
import time
from datetime import datetime
import pyaudio
import wave
from moviepy.editor import VideoFileClip, AudioFileClip
from pydub import AudioSegment
import os
from moviepy.editor import *
from cv2 import VideoCapture, CAP_PROP_FPS, CAP_PROP_FRAME_COUNT, CAP_PROP_FRAME_WIDTH, CAP_PROP_FRAME_HEIGHT
class AudioRecorder:
def __init__(self, filename):
self.filename = f'recording_{datetime.now().strftime("%Y-%m-%d_%H-%M")}.wav'
self.chunk = 2048
self.format = pyaudio.paInt16
self.channels = 1
self.rate = 44100
self.frames = []
self.audio = pyaudio.PyAudio()
self.input_device_index = self.audio.get_default_input_device_info()['index']
self.stream = self.audio.open(format=self.format, channels=self.channels,
rate=self.rate, input=True, input_device_index=self.input_device_index,
frames_per_buffer=self.chunk)
def start(self):
self.frames = []
self.stream.start_stream()
self.frames.append(self.stream.read(self.chunk))
def flush(self):
if self.stream is not None:
self.stream.stop_stream()
self.stream.close()
self.frames = []
def stop(self):
if self.stream.is_active():
self.stream.stop_stream()
self.stream.close()
self.audio.terminate()
with wave.open(self.filename, 'wb') as waveFile:
waveFile.setnchannels(self.channels)
waveFile.setsampwidth(self.audio.get_sample_size(self.format))