1. 项目背景与需求分析
去年团队协作时频繁需要录制操作演示视频,市面上主流录屏软件要么功能臃肿(如Camtasia),要么存在水印限制(如某国产软件)。更头疼的是商业软件普遍存在三个痛点:一是隐私顾虑,二是跨平台兼容性问题,三是自定义功能缺失。作为技术从业者,我决定用AI+FFmpeg的组合打造一个轻量级自主录屏方案。
这个自研工具需要满足以下核心需求:
- 支持Windows/macOS双平台
- 实现基础录屏功能(区域选择/帧率调节/音频采集)
- 集成AI降噪和智能标注功能
- 输出文件体积可控
- 完全本地运行保障隐私
2. 技术选型与架构设计
2.1 核心组件拆解
整个系统采用模块化设计,主要包含四大模块:
- 采集模块:通过FFmpeg捕获屏幕和音频设备
- 处理模块:调用Python实现的AI功能
- 控制模块:PyQt构建的图形界面
- 输出模块:FFmpeg编码压缩流水线
2.2 关键技术决策
选择FFmpeg作为底层核心基于三点考量:
- 支持DirectShow(Windows)和AVFoundation(macOS)两种采集架构
- 内置x264编码器可实现CRF质量调控
- 通过filter_complex实现音视频同步处理
AI部分采用ONNX运行时加载预训练模型,相比直接使用PyTorch有三个优势:
- 模型体积缩小60%(ResNet-18从45MB降至18MB)
- 推理速度提升20%(实测1080p视频处理仅增加15%耗时)
- 跨平台兼容性更好
3. 核心功能实现细节
3.1 屏幕采集与编码配置
关键FFmpeg参数示例:
bash复制ffmpeg -f gdigrab -framerate 30 -offset_x 100 -offset_y 200 \
-video_size 1280x720 -i desktop -f dshow -i audio="麦克风" \
-c:v libx264 -crf 23 -preset fast -pix_fmt yuv420p \
-af "highpass=f=200,lowpass=f=3000" output.mp4
参数优化经验:
- CRF值每增加6,文件体积减半(但23-28是视觉无损区间)
- preset建议用fast/medium平衡速度和质量
- 音频采样率保持44.1kHz避免重采样失真
3.2 AI功能集成方案
智能标注功能实现流程:
- 用YOLOv5s模型检测画面中的UI元素
- 对检测框进行运动追踪(CSRT算法)
- 通过OCR识别按钮文字
- 用OpenCV绘制动态标注框
实测发现两个性能优化点:
- 将检测帧率降至5fps仍能保持追踪连续性
- 启用TensorRT加速后推理耗时从120ms降至45ms
4. 踩坑实录与解决方案
4.1 音频同步问题
初期版本出现音画不同步,通过以下措施解决:
- 增加音频缓冲队列(500ms)
- 使用FFmpeg的async参数调整同步阈值
- 在GUI添加手动同步校准滑块
4.2 跨平台兼容性
macOS系统特有的两个问题:
- 需要codesign签名才能访问屏幕录制权限
- AVFoundation采集时存在1-2帧延迟
解决方案:
- 打包时自动执行签名操作
- 在视频流开头插入2帧空缓冲
5. 性能优化成果
经过3个版本的迭代,最终实现:
- 1080p30录制时CPU占用<15%(i5-1135G7)
- 输出文件体积比OBS减少40%
- 启动时间从6s优化到1.8s
- 内存占用稳定在120MB左右
工具现已开源并在团队内部推广,后续计划加入:
- 基于CLIP的自动章节标记
- 动态码率调整算法
- 硬件编码支持(QSV/NVENC)