之前写了个使用pillow截图和pyaudio录音最后合成视频的代码,
那个代码虽然避免了opencv视频和pyaudio音频同步困难的问题,但是如果录制时间太长的话会占用大量内存,甚至导致内存不足而崩溃。于是又重新设计了一下,改用opencv+pillow录屏,并且完美解决了画面和声音同步的问题。
功能描述:
同时录制屏幕图像和摄像头采集到的内容以及麦克风声音,把所有内容合成为最终视频文件,保证屏幕画面、摄像头画面以及声音的同步,把摄像头采集的人像缩小以后放在最终视频的右下角。
技术要点:
1)pillow进行屏幕截图
2)opencv根据屏幕截图生成视频
3)opencv采集摄像头视频
4)pyaudio录制麦克风声音
5)moviepy合成视频
6)使用事件进行多线程同步
参考代码:
生成的视频效果如下(播放器窗口缩小后截图),录制时长7分钟,最终视频文件大小为25M,合成视频过程中程序占用内存小于10%