name: screenstudio-alt
description: “Open-source headless Screen Studio alternative: auto speed-up of idle, auto-zoom on click clusters, keystroke overlay chips, smoothed synthetic cursor, and 9:16 vertical export that follows the action — post-production for screen recordings from the CLI.”
risk: critical
source: community
source_type: community
source_repo: connerkward/screenstudio-alternative-skill
date_added: “2026-06-16”
author: Conner K Ward
license: MIT
tags:
- screen-recording
- video
- post-production
- auto-zoom
- vertical-video
- ffmpeg
tools: - claude-code
- antigravity
- cursor
- gemini-cli
- codex-cli
plugin:
targets:
codex: blocked
claude: blocked
setup:
type: manual
summary: “Screen/input capture requires sensitive local permissions; keep out of plugin-safe bundles.”
docs: SKILL.md
何时使用
在润色屏幕录制/演示视频以便分享时使用;当用户提到 Screen Studio、自动缩放、空闲加速或从屏幕捕获制作垂直/社交媒体视频时使用;以及用于任何面向社交媒体的演示(垂直输出是这类视频的默认设置)。
来源: connerkward/screenstudio-alternative-skill(MIT)。
screenstudio-alt
该技能的代码位于此目录中(polish.py、render.py、studio.py、events-log.swift、测试夹具等)。通过 publish-skill 技能公开发布为connerkward/screen-studio-alternative。
两个组件:
events-log(Swift)——捕获端的输入记录器(光标 60Hz、点击、按键;在 macOS 安全输入期间丢弃按键)。仅在录制时运行。需要终端具备辅助功能/输入监控权限。自动缩放/按键/光标需要在捕获时获得这些数据——之后无法从像素中恢复。polish.py(Python、ffmpeg + PIL)——后期处理过程:
python3 src/polish.py in.mp4--eventsin.events.jsonl\--speedup# compress idle (input-gap ∩ frozen-pixels; animations stay 1x)--zoom# eased auto-zoom on click clusters (zoompan)--keys# accumulating keystroke chips (PIL overlays, no drawtext dep)--smooth-cursor# synthetic eased cursor (best with sck-record --no-cursor)--vertical# ALSO emit 1080x1920 following the action--speedup无需事件即可工作(仅 freezedetect)——可用于整个现有的 dailies 语料库。
render.py——高质量非破坏性渲染器(推荐):在原始高分辨率帧上使用单遍弹簧物理相机,通过 LANCZOS 缩小到较小的目标(清晰缩放,比 ffmpeg 放大路径锐利约 1.3 倍),60fps,H + 9:16 V。可调--freq/--zeta(弹簧)、--fps、--target-w。接受显式--regions [{t0,t1,z,cx,cy}]。polish.py是较旧的 ffmpeg 滤镜回退方案。studio.py [recording.mp4]——本地 Web UI,NLE 风格固定标尺时间线(条 = 源时长,从不缩放 → 上游始终锚定):缩放区域是可拖动的块(移动 / 重调边缘时间 / 单击添加 / 双击删除);空闲跨度是仅编辑速率的加速块——源范围锁定,速率通过检查器滑块在选择时设置,或通过右边缘速率拉伸拖动(FCP retime / Premiere Rate Stretch)设置;速率变化仅向下游波及。可调余弦缓动斜坡、默认缩放、宽高比、帧样式。始终平滑的合成光标 + 点击涟漪 + 真实录制的点击声(CC0 #735771)。导出使用 render.py。空闲端口,本地运行。(按键覆盖层在引擎中存在,但默认关闭。)
简单路径
screencast.sh --demo(screencast 技能)执行整个链路:启动事件记录器、录制,然后自动润色并输出 9:16 垂直视频。垂直是面向社交媒体的演示的默认。
注意事项(来之不易的经验,保留在此以免重蹈覆辙)
- ffmpeg无法做动画化的
scale=eval=frame→crop(链接重新初始化会卡住 crop 的逐帧表达式)。这就是缩放使用zoompan的原因(那里没有t变量——使用on/FPS)。 - 这台机器的 ffmpeg 缺少
drawtext;所有文字/光标覆盖层都是 PIL 渲染的 PNG +overlay。 - 测试台:
make-fixture.py合成一个假的屏幕录制 + 带真实数据的 events.jsonl——在对真实素材建立信任之前,先用它验证任何改动。
局限性
- 该工作流假设 FFmpeg 和配套脚本在本地可用;它不是托管的视频编辑器。
- 润色后的光标、点击和按键效果依赖于录制期间捕获的事件日志;缺少日志会限制可重建的内容。
- 自动缩放和空闲加速仍需要人工审查节奏、构图和平台特定偏好。