Python 3.x 如何在python中使用屏幕录制录制语音

Python 3.x 如何在python中使用屏幕录制录制语音,python-3.x,multithreading,opencv,tkinter,pyaudio,Python 3.x,Multithreading,Opencv,Tkinter,Pyaudio,我正在用python制作一个屏幕记录器,在这本书中,我成功地用python PIL库捕获了屏幕 并将其显示在标签中(当前录制) 现在我想要的是当用户在我的GUI窗口中单击audio rec按钮时从用户处录制音频,当用户单击stop record voice按钮时停止录制语音 最后,我想将我的语音和视频记录合并到最终输出中,作为视频和语音 有谁能告诉我如何在一个脚本中合并这两个代码并成功运行它 导入日期时间 将tkinter作为tk导入 从tkinter进口* 从tkinter导入ttk,平面 从

我正在用python制作一个屏幕记录器,在这本书中,我成功地用python PIL库捕获了屏幕

并将其显示在标签中(当前录制)

现在我想要的是当用户在我的GUI窗口中单击audio rec按钮时从用户处录制音频,当用户单击stop record voice按钮时停止录制语音

最后,我想将我的语音和视频记录合并到最终输出中,作为视频和语音

有谁能告诉我如何在一个脚本中合并这两个代码并成功运行它

导入日期时间
将tkinter作为tk导入
从tkinter进口*
从tkinter导入ttk,平面
从PIL导入图像、ImageTk、ImageGrab
进口cv2
将numpy作为np导入
导入线程
导入win32api
从tkinter.filedialog导入asksaveasfilename
视频大小=(800420)#(960540)
cap=cv2.视频捕获(0)
date=datetime.datetime.now()
filename='rec\u%s-%s-%s-%s%s%s.mp4'(date.year、date.month、date.day、,
date.hour、date.minute、date.second)
fourcc=cv2.VideoWriter_fourcc(*“H264”)
帧速率=15
out=cv2.VideoWriter()
def change_i():
如果声音\u btn.image==图标:
开始录制()
声音\u btn.config(图像=icon2)
声音图像=icon2
其他:
停止录制()
sound_btn.config(图像=图标)
声音图像=图标
def change_r():
如果记录btn['text']=“开始记录”:
开始录制()
rec_btn.config(text=“停止重新编码”)
其他:
停止录制()
rec_btn.config(text=“开始录制”)
def change_w():
如果cap_btn.image==web:
启动网络摄像头()
cap_btn.config(image=web2)
cap_btn.image=web2
其他:
停止网络摄像头(无)
cap_btn.config(image=web)
cap_btn.image=web
#---屏幕截图
def光标位置(图像、中心、半径、颜色、厚度):
中心=元组(映射(int,center))
rgb=[255*c表示颜色为c[:3]]#转换为OpenCV的0-255比例
alpha=颜色[-1]
半径=整数(半径)
如果厚度>0:
衬垫=半径+2+厚度
其他:
焊盘=半径+3
roi=切片(中心[1]-焊盘,中心[1]+焊盘),切片(中心[0]-焊盘,中心[0]+焊盘)
尝试:
overlay=img[roi].copy()
cv2.圆(img、中心、半径、rgb、厚度=厚度、线型=cv2.线_AA)
不透明度=α
cv2.addWeighted(src1=img[roi],alpha=opacity,src2=overlay,beta=1.-不透明度,gamma=0,dst=img[roi])
除:
debug(“透明的_圈可能部分位于img之外。没有绘制它。”)
def录制屏幕():
全局记录
录音=真
录制时:0,0.5),-1)
#cv2.圆(框架,curpos,10,(0255255),2)
帧=cv2。调整大小(帧、视频大小)
粘贴(Image.fromarray(frame))
frame=cv2.CVT颜色(frame,cv2.COLOR_RGB2BGR)
输出。写入(帧)
def start_录制():
如果不在外,则为。IsOpen():
打开(文件名、fourcc、帧速率、视频大小)
threading.Thread(target=recording\u screen,daemon=True).start()
def停止_录制():
全局记录
录音=假
out.release()
#---网络摄像机
网络摄像头=无
网络摄像头大小=(280200)
def读取框(imgbox):
如果cap.isOpened():
ret,frame=cap.read()
如果ret:
帧=cv2。翻转(帧,1)
frame=cv2.CVT颜色(frame,cv2.COLOR_BGR2RGB)
frame=cv2。调整大小(框架、网络摄像头大小)
image=image.fromarray(帧)
imgbox.image.paste(图像)
网络摄像头。之后(20,读取帧,imgbox)
def stop_网络摄像头(事件):
全球网络摄像机
如果使用网络摄像头:
网络摄像头。销毁()
网络摄像头=无
第1章释放()
def start_网络摄像头():
全球网络摄像机
如果网络摄像头为“无”:
第()章
webcam=tk.Toplevel()
#网络摄像头=tk.lift()
webcam.attributes(“-toppost”,True)#它将窗口置于其他窗口之上
几何体({}x{}+5+520'.格式(网络摄像头大小[0],网络摄像头大小[1]))
网络摄像头。覆盖直接(1)
imgbox=tk.标签(网络摄像头)
imgbox.pack()
imgbox.image=ImageTk.PhotoImage(image=image.new('RGB',网络摄像头大小,(0,0,0)))
imgbox.config(image=imgbox.image)
#网络摄像头绑定(“”,停止网络摄像头)
读取帧(imgbox)
#---梅因
root=tk.tk()
root.title('屏幕记录器')
#root.iconbitmap(r'rec_i.ico')#表示图标
根。可调整大小(宽度=假,高度=假)
icon=PhotoImage(file='dh.png')
icon2=PhotoImage(文件='stop.png')
web=PhotoImage(文件='webcam.png')
web2=PhotoImage(文件='webcame.png')
根几何体('+260+70')
tkimage=ImageTk.PhotoImage(Image.new('RGB',视频大小,(0,0,0)))
w、 h=视频大小
vbox=tk.Label(根,图像=tkimage,宽度=w,高度=h,bg='black')
vbox.pack(pady=10,padx=25)
frame=tk.frame(根)
frame.pack()
按钮(框架,图像=图标,宽度=70,浮雕=平面,命令=更改)
声音网格(行=0,列=1)
声音图像=图标
cap_btn=tk.按钮(框架,图像=腹板,宽度=70,浮雕=平面,命令=更改)
cap_btn.网格(行=0,列=2)
cap_btn.image=web
消息=标签(帧,文本='****按开始按钮开始录制****')
message.grid(行=1,列=1)
root.mainloop()
我可以做些什么来通过麦克风录制用户的声音,同时又能正常录制屏幕


有什么建议吗

您只需在同一脚本中录制屏幕和声音即可。该代码将生成两个文件,一个是.mp4,另一个是.mp3,现在您已设置为。。。 将该音频文件添加到视频文件并保存到路径