macOS 单窗口连声音一起录:QuickRecorder 用 ScreenCaptureKit 做轻量录屏的实现思路

📅 发布时间:2026/9/20 2:53:40
macOS 单窗口连声音一起录:QuickRecorder 用 ScreenCaptureKit 做轻量录屏的实现思路
macOS 单窗口连声音一起录QuickRecorder 用 ScreenCaptureKit 做轻量录屏的实现思路【免费下载链接】QuickRecorderA lightweight screen recorder based on ScreenCapture Kit for macOS / 基于 ScreenCapture Kit 的轻量化多功能 macOS 录屏工具项目地址: https://gitcode.com/GitHub_Trending/qu/QuickRecorderQuickRecorder 是一款基于原生 ScreenCaptureKit 框架的 macOS 录屏工具安装包不到 10MB支持屏幕、区域、窗口、应用、移动设备与系统声音六种录制模式。本文拆解它在窗口级录制、编码器选择、双轨音频与演示叠加上的四个关键实现决策。QuickRecorder 主界面六种录制模式入口与录制前参数设置面板只录这个窗口它的声音有多麻烦录制范围往往大于需求。以提交 bug 报告为例只需要录下终端窗口但 macOS 自带录屏工具只能录整块屏幕事后还得裁剪视频期间弹出的无关通知也全部入镜。窗口自身的声音更难。不少第三方工具的窗口录制实际是全屏录制后裁剪窗口音频要么按整个系统声音录要么录不到。QuickRecorder 的解法是把筛选放在源头。它依赖 ScreenCaptureKitmacOS 12.3 的系统级屏幕采集框架用 SCContentFilter 声明录哪块屏、录哪些窗口其余内容在进入编码管线之前就被系统丢弃。窗口录制的筛选技巧SCContentFilter 与 display 的组合单窗口走独立采集路径。对单个窗口QuickRecorder 直接构造与桌面无关的过滤器窗口独立于桌面被采集// 单窗口独立于桌面采集 SCContext.filter SCContentFilter(desktopIndependentWindow: window) // 多窗口display 包含列表组合 SCContext.filter SCContentFilter(display: screen, including: windows)这两行对应 QuickRecorder 的两种窗口录制模式单窗口走 desktopIndependentWindow多窗口走display包含列表。过滤器本质是白名单不在名单上的窗口根本不进编码管线后续也不需要任何内存合成。帧率与窗口声音在同一个配置里确定。ScreenCaptureKit 默认只在屏幕内容变化时投递帧静态画面下的实际帧率远低于名义值这也降低了持续录制的负载conf.minimumFrameInterval CMTime(value: 1, timescale: frameRate 60 ? 0 : frameRate) conf.capturesAudio recordWinSound || fastStart || audioOnly第一行设置最大帧间隔60fps 时传 0 表示交给系统以最高帧率投递第二行在 macOS 13 上按 48kHz/双声道开启所录窗口的声音采集这就是窗口声音内录功能的来源。H.264 与 H.265 的回退策略QuickRecorder 的编码器选择逻辑为什么默认不是 H.265。H.264 兼容性最广H.265 同等质量下目标码率低约 44%码率系数 0.5 对 0.9。QuickRecorder 把兼容性当默认值把体积当选项。录制前探测硬件编码器。启动前先尝试创建一个带 RequireHardwareAcceleratedVideoEncoder 约束的 VideoToolboxApple 硬件编解码框架会话若创建失败通常是分辨率超出硬件编码器支持范围弹窗让用户改选 H.265 或继续软件编码并明确提示 CPU 占用会显著上升。目标码率由公式估算。码率 宽 × 高 × (fps/8) × 编码器系数 × 质量系数下限 200kbps低、中质量档分别将系数钳制在 0.1 下限与 0.4–0.6 区间最高档保持 1.0。编码器目标码率Alpha 通道兼容性适用场景H.264基准系数 0.9不支持最广日常录制、通用分享H.265低约 44%系数 0.5不支持macOS 10.13长时长录制、存储优先HEVC with Alpha与 H.265 相当完整支持iMovie / FCPX透明视频素材合成HDR 是独立分支。macOS 15 上启用系统 HDR 采集预设并按 BT.2020 PQ 色彩空间输出同时把 queueDepth待编码帧缓冲深度提到 8——源码注释明确标注上限 8 帧、低于 4 会卡顿属于踩过坑后的经验值。面向后期剪辑的设计系统声音与麦克风分轨默认合并可选分轨。默认行为是录制结束后把麦克风轨混入主音轨关闭将麦克风录制到主音轨设置后系统声音与麦克风成为两条独立音轨后期可分别调整音量——这正是教学录屏里讲解与演示声音需要分开处理的场景。纯音频录制输出 .qma 包。包内是 sys 与 mic 两个音频文件加一份记录格式与音量参数的 info.json可直接在应用内二次导出等价于一个轻量多轨工程。回声消除可开关。麦克风拾到系统声音时可选开启 AEC回声消除代码提供 min/mid/max 三档音量压制代价是轻微的人声处理痕迹默认关闭。 鼠标高亮不占额外管线把特效做成真实窗口鼠标高亮是一个真的窗口。QuickRecorder 不在视频流里合成高亮而是运行一个跟随光标的 SwiftUI 浮动窗口 Mouse Pointer左键蓝色、右键紫色、其他键橙色并把该窗口注入 SCContentFilter 的包含列表随屏采走。代价与多录一个窗口相同录制管线本身零合成开销。演讲者前置交给系统。macOS 14 上摄像头由系统演讲者前置效果直接合成进画面流应用只读取 presenterOverlayContentRect 附件判断摄像头小窗状态低版本回退为悬浮窗交互保持一致。暂停录制不打断时间线。暂停即丢弃帧并记录 PTS 偏移恢复后用 CMSampleBufferCreateCopyWithNewTiming 修正时间戳成片无黑帧、时长连续。三类工作流里的录屏教学、Bug 复现与静音素材教师录课。窗口录制 麦克风 回声消除配合应用黑名单过滤 Dock、通知中心等与隐藏桌面文件画面干净双轨音频让课后剪辑可以独立调整音量。开发者复现 Bug。内置 AppleScript 接口提供 record window 命令可按窗口标题直接指名目标窗口开始录制适合接入自动化流程录完还能自动触发剪辑窗口裁掉开头误触。内容创作者。HEVC with Alpha 输出带透明通道的视频可直接投入 iMovie 或 FCPX 做画中画移动设备屏幕录制则把录屏对象从桌面扩展到 iOS 设备。从 QuickRecorder 的录屏实现里能提炼的做法是让系统过滤器在编码前完成裁剪让硬件编码器承担重活把视觉特效下沉为真实窗口或系统效果应用本身只负责状态机与参数。随着 SCK 不断新增 HDR 采集、演讲者前置等能力这种少做、借力系统的路线会是轻量录屏工具值得借鉴的方向。【免费下载链接】QuickRecorderA lightweight screen recorder based on ScreenCapture Kit for macOS / 基于 ScreenCapture Kit 的轻量化多功能 macOS 录屏工具项目地址: https://gitcode.com/GitHub_Trending/qu/QuickRecorder创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考