# 使用Python3基于FFmpeg实现的录制摄像头和屏幕录制 ## 1. 项目介绍 该项目是为珠海一家音频技术公司开发的会议视频录制管理工具。客户需求使用的场景是在会议室开会时切换录制电脑屏幕和摄像头的内容。项目采用python3语言+pyqt5界面实现,录制模块基于ffmpeg项目,在win系列系统上稳定运行。 #### 系统主要模块及描述: 1. **主界面。** 主界面显示录制时间和开始/停止按钮展示录制状态,为了尽可能少的出现在录制内容当中,界面在失去焦点时会隐藏。 2. **全局快捷键。** 自定义全局快捷键控制录制开始与停止、切换录制方式。 3. **托盘图标。** 程序在运行的大部分时间通过托盘图标来展示当前录制状态,不同录制状态分别以不同的图标显示。 4. **右键菜单。** 当主界面隐藏时,除使用全局快捷键切换录制,还可以通过托盘图标和主界面的右键菜单操作。 5. **自定义设置。** 设置界面可以对录制相关参数进行自定义修改,主要可修改录制参数包括:设备信息、帧率、视频编码格式、cpu线程数、分辨率自适应或自定义等,以及自定义录制快捷键和输出视频文件夹。 6. **编译和打包。** 该项目是一个完整的安装包程序,安装界面定制显示客户公司相关的信息,客户在安装时可选择生成桌面快捷方式和开机启动等选项。 #### 项目主要特色功能点: 1. **防盗版机制。** 通过注册表存储和验证安装信息防止复制运行实现简易防盗机制,限制非正常安装用户使用(客户将软件和自身硬件产品一起打包出售给他们的客户)。 2. **按日期归档录制产生的文件。** 文件名区分录制方式,标注录制时间,每天录制产生的视频文件在单独的文件夹内。 3. **多种录制设备可选择切换。** 应对缩放的屏幕可选择GDI(图形设备接口)录制方式。 4. **检测到录制非人为断开,自动重新启动录制。** 解决了某些录制设备在windows10系统中运行不兼容,录制时间长之后会随机断开的问题。 #### 交付效果: 项目实际运行效果:在参数设置为分辨率=1024x768、帧率=30帧/s、视频编码=h264、threads=4的情况下,在i5计算机上进行录制,cpu占有率保持在30%~40%之间。保证录制清晰度的同时不会影响到计算机运行其他程序的资源。 ## 2. 运行配置 ### 1. 运行环境和所需组件 1. [Python3](https://www.python.org/downloads) 2. 安装依赖组件,-i是代理地址,使用代理下载速度会加快一点: ```python pip install -r requirements.txt -i https://pypi.douban.com/simple ``` 3. 录制屏幕需要下载[Screen Capture Recorder](https://sourceforge.net/projects/screencapturer/) 4. 安装编译工具cx_Freeze(如果需要)。 ```python pip install cx_freeze ``` 5. 下载安装打包工具[Inno Setup](http://www.jrsoftware.org/isinfo.php)(如果需要打包)。 ### 2. 在命令行下运行 ```python python recordwindow.py #Win10-64系统稳定运行,其他系统暂未测试。 ``` ### 3. 设置 参考设置如下: * 摄像头名称:USB2.0 HD UVC WebCam * 声音输入设备:麦克风 (Realtek High Definition Audio) * 屏幕录制设备:screen-capture-recorder * 系统声音设备:virtual-audio-capturer 不同机器和设备名称有所不同。 ### 4. 编译 ``` python csetup.py build #默认编译的可执行文件生成在目录:D:\dev\record\record-win #参照csetup.py修改编译信息 ``` ### 5. 打包 用Inno setup打开setup.iss文件,修改必要信息,然后编译执行。 ### 6. 开发总结 [请参见总结文章](https://segmentfault.com/a/1190000015409826)