Python + opencv + pyaudio如何实现带声音屏幕录制

  介绍

这篇文章将为大家详细讲解有关Python + opencv + pyaudio如何实现带声音屏幕录制,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

基于个人的爱好和现实的需求,决定用Python做一个屏幕录制的脚本。因为要看一些加密的视频,每次都要登录,特别麻烦,遂决定用自己写的脚本,将加密视频的播放过程全程录制下来,这样以后看自己的录播就好了。结合近期自己学习的内容,正好用Python来练练手,巩固自己的学习效果。

经过多番搜索,决定采用Python + opencv + pyaudio来实现屏幕录制。网上搜索到的录屏,基本都是不带声音的,而我要实现的是带声音的屏幕录制。下面就开始一步一步的实现吧。

<>强声音录制

import  pyaudio   import 波   import 系统      CHUNK =1024   if  len (sys.argv), & lt;, 2:   ,打印(“Plays  a  wave 文件。\ n \ nUsage:, % s  filename.wav", %, sys.argv [0])   ,sys.exit (1)      时间=wf  wave.open (sys.argv [1],, & # 39; rb # 39;)   时间=p  pyaudio.PyAudio ()   时间=stream  p.open(格式=p.get_format_from_width (wf.getsampwidth ()),   ,,,渠道=wf.getnchannels (),   ,,,速度=wf.getframerate (),   ,,,输出=True)      时间=data  wf.readframes(块)   while  data  !=, & # 39; & # 39;:   ,stream.write(数据)=,,data  wf.readframes(块)      stream.stop_stream ()   stream.close ()   p.terminate ()

简洁回调函数版音频录制

import  pyaudio   import 波   import 时间   import 系统      CHUNK =1024   FORMAT =pyaudio.paInt16   时间=CHANNELS  2   RATE =44100   RECORD_SECONDS =10   时间=WAVE_OUTPUT_FILENAME “output.wav"      时间=p  pyaudio.PyAudio ()   时间=wf  wave.open (WAVE_OUTPUT_FILENAME, & # 39; wb # 39;)   wf.setnchannels(渠道)   wf.setsampwidth (p.get_sample_size(格式)   wf.setframerate(率)      time_count =0   def 回调(frame_count, in_data,还以为,time_info,状态):   ,wf.writeframes (in_data)   ,如果(& lt; time_count  10):   return 才能;(in_data, pyaudio.paContinue)   ,其他的:   return 才能;(in_data, pyaudio.paComplete)      时间=stream  p.open(格式=p.get_format_from_width (wf.getsampwidth ()),   ,,,渠道=wf.getnchannels (),   ,,,速度=wf.getframerate (),   ,,,输入=True,   ,,,stream_callback=回调)      stream.start_stream ()   打印(“*,recording")   while  stream.is_active ():   ,time . sleep (1)   time_count  +=, 1      stream.stop_stream ()   stream.close ()   wf.close ()   p.terminate ()   打印(“*,recording 完成了!“)

<强>视频录制(无声音)

得到PIL  import  ImageGrab   import  numpy  as  np   import  cv2      时间=image  ImageGrab.grab() #获得当前屏幕   时间=width  image.size [0]   时间=height  image.size [1]   打印(“宽度:“,宽度,,“高度:“,,高度)   print (“image 模式:“,image.mode)   k=np.zeros((宽度、高度),np.uint8)   时间=fourcc  cv2.VideoWriter_fourcc (* & # 39; xvid # 39;) #编码格式   时间=video  cv2.VideoWriter (& # 39; test.avi& # 39;,, fourcc,, 25日,(宽度,高度))   #输出文件命名为test.mp4,帧率为16,可以自己设置   while 真正的:=,,img_rgb  ImageGrab.grab ()   ,img_bgr=cv2.cvtColor (np.array (img_rgb), cv2.COLOR_RGB2BGR) #转为opencv的BGR格式   ,video.write (img_bgr)   ,cv2.imshow (& # 39; imm # 39;,, img_bgr)   ,if  cv2.waitKey (1),,, 0 xff ==,奥德(& # 39;提问# 39;):   ,打破   video.release ()   cv2.destroyAllWindows ()

<强>录制的音频与视频合成为带声音的视频

录制200帧,带音频的MP4视频,单线程

import 波   得到pyaudio  import  PyAudio paInt16   得到PIL  import  ImageGrab   import  numpy  as  np   import  cv2   得到moviepy.editor  import  *   得到moviepy.audio.fx  import    import 时间      CHUNK =1024   FORMAT =pyaudio.paInt16   时间=CHANNELS  2   RATE =44100   时间=WAVE_OUTPUT_FILENAME “output.wav"      时间=p  pyaudio.PyAudio ()   时间=wf  wave.open (WAVE_OUTPUT_FILENAME, & # 39; wb # 39;)   wf.setnchannels(渠道)   wf.setsampwidth (p.get_sample_size(格式)   wf.setframerate(率)   audio_record_flag =,真的   def 回调(frame_count, in_data,还以为,time_info,状态):   ,wf.writeframes (in_data)   ,if  audio_record_flag:   return 才能;(in_data, pyaudio.paContinue)   ,其他的:   return 才能;(in_data, pyaudio.paComplete)   时间=stream  p.open(格式=p.get_format_from_width (wf.getsampwidth ()),   ,,,渠道=wf.getnchannels (),   ,,,速度=wf.getframerate (),   ,,,输入=True,   ,,,stream_callback=回调)   时间=image  ImageGrab.grab() #获得当前屏幕   时间=width  image.size [0]   时间=height  image.size [1]   打印(“宽度:“,宽度,,“高度:“,,高度)   print (“image 模式:“,image.mode)   k=np.zeros((宽度、高度),np.uint8)      时间=fourcc  cv2.VideoWriter_fourcc (* & # 39; xvid # 39;) #编码格式   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Python + opencv + pyaudio如何实现带声音屏幕录制