OpenScreen 深度解读:Electron + PixiJS 构建的开源录屏后期工厂
> 项目:OpenScreen > GitHub:https://github.com/siddharthvaddem/openscreen > 协议:MIT > 定位:Screen Studio 的免费开源替代品
---
一、一句话定位
OpenScreen 是一个基于 Electron 的桌面录屏工具,但它不是简单的"按录制键保存"——它把录屏、剪辑、缩放动画、运动模糊、背景替换、标注、变速、多平台导出做成了一条完整的后期生产管道,全部在一个应用里完成。
作者的原话很实在:"Screen Studio 很棒,但 $29/月。如果你只需要核心功能,这里是免费的。"
---
二、技术架构:Electron + WebCodecs + PixiJS 的三层栈
OpenScreen 的技术选择很有意思——它完全基于 Web 技术栈,但做的却是传统上需要原生视频编辑软件才能做的事。
2.1 录制层:MediaRecorder + 多轨道音频混合
核心文件:src/hooks/useScreenRecorder.ts
录制部分依赖浏览器标准的 MediaRecorder API,但有精心设计的工程细节:
- 分辨率自适应:目标 4K (3840×2160),但根据屏幕实际分辨率降级到 QHD 或 FHD,保证码率匹配(4K 45Mbps、QHD 28Mbps、基础 18Mbps)
- 多轨道音频混合:通过
AudioContext创建MediaStreamAudioDestinationNode,将屏幕音频和麦克风音频实时混音,麦克风增益提升 1.4 倍 - WebM 时长修复:录制停止后用
@fix-webm-duration/fix修复 WebM 容器的时长元数据(Chrome MediaRecorder 的已知 bug) - 分段录制:每 1 秒一个 chunk,支持暂停/继续录制
2.2 渲染层:PixiJS + 自定义滤镜
核心文件:src/lib/exporter/frameRenderer.ts
这是 OpenScreen 的技术核心。它用 PixiJS(一个 WebGL 2D 渲染引擎)构建了一个完整的视频合成器:
- VideoSprite:视频帧作为 PixiJS Sprite 贴图
- CameraContainer:承载缩放/平移变换的容器
- BackgroundSprite:背景层(壁纸/纯色/渐变/自定义图片)
- MaskGraphics:圆角裁剪蒙版
- BlurFilter + MotionBlurFilter:来自
pixi-filters的运动模糊 - ShadowCanvas:Canvas2D 绘制的投影效果
- CompositeCanvas:最终合成输出
zoomTransform.ts):// 根据摄像机移动速度和缩放变化计算动态模糊
const velocity = Math.hypot(currCamX - prevCamX, currCamY - prevCamY) / deltaTime;
const blurPx = Math.min(MAX_BLUR_PX, velocity / PEAK_VELOCITY_PPS * MAX_BLUR_PX);
这不是简单的静态高斯模糊,而是基于摄像机运动矢量的动态运动模糊——移动越快、模糊越强,让缩放动画看起来像专业摄像机运动。
2.3 导出层:WebCodecs + mediabunny
核心文件:src/lib/exporter/videoExporter.ts, muxer.ts
导出管道使用了现代 Web 视频处理技术栈:
- WebCodecs API:
VideoEncoder硬件加速编码(优先尝试,失败回退软件编码) - StreamingVideoDecoder:基于
web-demuxer的流式解码,支持 AV1 编码字符串解析 - mediabunny:用于 MP4 容器封装,支持 fast-start(网络流式播放优化)
- 异步帧队列:
AsyncVideoFrameQueue控制内存使用,Windows 上限 120 帧防止内存膨胀 - 自动降级:如果硬件编码失败,自动切换到软件编码重试
streamingDecoder.ts 里有大量针对 Chrome/Electron MediaRecorder 生成 WebM 容器不可靠的容错的代码——容器时长可能是 Infinity、0 或膨胀的,所以用实际 packet 时间戳来验证和修正。2.4 时间线编辑:dnd-timeline
核心文件:src/components/video-editor/timeline/TimelineEditor.tsx, TimelineWrapper.tsx
OpenScreen 使用 dnd-timeline(基于 dnd-kit 的无头时间线库)构建编辑时间线:
- 支持 Zoom、Trim、Annotation、Blur、Speed 五种轨道
- 拖拽调整起止时间、缩放深度、变速倍率
- 碰撞检测防止轨道重叠
- 自动缩放建议:分析鼠标停留位置,推荐缩放焦点
---
三、自动缩放建议:让 AI 帮你找焦点
核心文件:src/components/video-editor/timeline/zoomSuggestionUtils.ts
这是 OpenScreen 最像"智能功能"的地方:
1. 录制时追踪鼠标位置(cursor telemetry) 2. 分析鼠标停留区域(dwell detection):
- 停留 450ms-2600ms 视为候选
- 移动距离超过 2% 屏幕则视为新区域
这不是机器学习,而是基于启发式规则的模式识别——但效果很实际:用户不需要手动找焦点,系统自动推荐"你可能想放大看这里"。
---
四、与 Screen Studio 的诚实对比
| 功能 | OpenScreen | Screen Studio |
|---|---|---|
| 价格 | 免费 | $29/月 |
| 自动缩放 | ✅(基于鼠标停留) | ✅(更智能的算法) |
| 运动模糊 | ✅ | ✅ |
| 背景替换 | ✅(壁纸/纯色/渐变/图片) | ✅ |
| 摄像头支持 | ✅ | ✅ |
| 标注 | ✅(文字/箭头/图片) | ✅ |
| 变速 | ✅ | ✅ |
| 多平台导出 | ✅(MP4/WebM/GIF) | ✅ |
| 跨平台 | ✅(macOS/Linux/Windows) | macOS/Windows |
| 稳定性 | beta,有已知问题 | 成熟商业产品 |
| 学习曲线 | 低 | 低 |
---
五、开源录屏生态定位
| 工具 | 定位 | 适合谁 |
|---|---|---|
| OBS | 直播/复杂场景 | 主播、高级用户 |
| Kap | macOS 轻量截图/GIF | macOS 用户 |
| ShareX | Windows 全能截图 | Windows 用户 |
| Screen Studio | 专业产品演示 | 愿意付费的用户 |
| OpenScreen | 免费的产品演示后期 | 想要 Screen Studio 效果但不想付费 |
---
六、实际可用性评估
优势
- 跨平台:Electron 天然三端,AppImage 对 Linux 用户很友好
- 技术栈现代:WebCodecs、PixiJS、Vite、TypeScript——对开发者友好
- 模块化架构:录制、渲染、导出、时间线编辑分层清晰
- i18n 支持:8 种语言(含中文)
已知问题
- Gatekeeper 绕过:macOS 需要手动运行
xattr命令,对普通用户不友好 - 系统音频限制:macOS 13+ 才行,Linux 需 PipeWire
- beta 稳定性:Electron 应用常见的内存/性能问题
- 单维护者:作者自述 "I'm new to open source, idk what I'm doing"
七、深层洞察:Web 技术做视频编辑的边界
OpenScreen 展示了一个有趣的边界测试:Web 技术栈能做多复杂的视频后期处理?
答案是有一定上限但比想象中高:
- WebCodecs API 让浏览器能直接处理原始视频帧(不再只能播放预编码视频)
- PixiJS 的 WebGL 加速让实时合成成为可能
- 但复杂的时间线编辑、多轨道音频混合、颜色校正仍然是原生应用的领地
---
八、结论
OpenScreen 是一个由个人开发者用现代 Web 技术栈构建的录屏后期工具,它的价值不在于技术创新,而在于用免费+开源填补了 Screen Studio 的市场空白。
技术上看,它的 PixiJS 渲染管道、WebCodecs 导出、自动缩放建议都有可圈可点之处。但作为 beta 项目,稳定性和性能仍有很大提升空间。
如果你是需要做产品演示的开发者,不愿意为 Screen Studio 付费,OpenScreen 值得一试。如果你是视频专业人士,它可能还不够。但作为一个开源项目,它的代码组织和架构设计对学习 Electron + Web 视频处理很有帮助。
---
> 费曼视角补注:OpenScreen 的作者在 README 里写了这么一句——"I'm new to open source, idk what I'm doing lol"。这句话比任何技术描述都更诚实。很多人被"开源"的光环吓到,以为必须是大神才能做贡献。但 OpenScreen 证明了一件事:你不需要是专家才能做出有用的东西。一个懂 Electron 和 React 的开发者,加上对 Screen Studio 的观察,就能做出一个 thousands of stars 的项目。做东西的本质不是完美,是解决一个具体的问题。
---
参考
- GitHub:https://github.com/siddharthvaddem/openscreen
- Screen Studio:https://screenstudio.rocks/
- dnd-timeline:https://www.npmjs.com/package/dnd-timeline
- WebCodecs API:https://developer.mozilla.org/en-US/docs/Web/API/WebCodecs_API
- PixiJS:https://pixijs.com/