在 Mac 上用命令行自动截图
使用 macOS screencapture 循环完成全屏、固定区域和翻页截图,并正确命名文件、排查常见问题。

本指南将介绍如何在终端中使用 macOS screencapture 自动截图。你会检查权限,测试一次截图,创建全屏和固定区域循环,按需添加翻页按键,并学习如何停止任务和排查问题。
调试命令前先检查权限
如果截图为空,或没有截到受保护应用的内容,“终端”可能需要屏幕录制权限。打开系统设置 > 隐私与安全性 > 屏幕与系统音频录制,允许“终端”;如果 macOS 要求,请重新打开“终端”。
只截图时不需要辅助功能权限。只有 osascript 通过 System Events 控制其他应用或发送按键时,才需要该权限。
在终端中截取一张图片
先生成一个文件:
screencapture -x "$HOME/Desktop/test-screenshot.png"
-x 选项会关闭截图声音。如果文件正确,再继续测试短循环。
常用的内置选项包括:
| 选项 | 结果 |
|---|---|
-R x,y,width,height | 截取固定矩形区域 |
-m | 只截取主显示器 |
-i | 交互式选择区域或窗口 |
-w | 仅允许交互式窗口选择 |
-T 5 | 延迟 5 秒截图 |
-t jpg | 保存为 JPG 格式 |
-C | 在非交互式截图中包含指针 |
-T 参数可以充当简单的截图计时器。在终端运行 man screencapture,可查看当前 macOS 版本支持的选项。
每隔几秒截取全屏
长时间运行前,先用下面的循环测试三帧:
RUN_DIR="$HOME/Desktop/screenshot-run-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$RUN_DIR"
COUNT=3
for ((i=1; i<=COUNT; i++)); do
screencapture -x "$RUN_DIR/frame-$(printf "%03d" "$i").png"
if (( i < COUNT )); then
sleep 5
fi
done
文件会按 frame-001.png、frame-002.png 等名称排序。条件判断会跳过最后一次截图后没有必要的 5 秒等待。
增加真实任务的 COUNT 前,请检查全部三张图。需要提前停止时按 Control-C;已经保存的文件会留在该任务的文件夹中。
重复截取一个固定区域
目标始终位于同一位置时,添加 -R:
RUN_DIR="$HOME/Desktop/area-run-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$RUN_DIR"
COUNT=20
for ((i=1; i<=COUNT; i++)); do
screencapture -x -R 100,100,1200,800 "$RUN_DIR/frame-$(printf "%03d" "$i").png"
if (( i < COUNT )); then
sleep 5
fi
done
矩形格式为 x,y,width,height。如果窗口移动,命令仍会截取原坐标。请先运行三帧,并等循环结束后再移动目标。
在 Retina 显示器上,400x300 的逻辑矩形可能生成 800x600 的 Retina 截图。命令选取的区域没有错误,只是 macOS 按显示器像素密度保存了图片。
保存 JPG 而不是 PNG
使用 -t jpg 和 .jpg 扩展名:
screencapture -x -t jpg "$HOME/Desktop/test-screenshot.jpg"
对于界面文字和图表,PNG 是更稳妥的默认格式。JPG 在照片内容中更小,但可能让小字变模糊。
在两次截图之间按键,同时避免多翻一页
下面的翻页循环会先截图,只在还需要下一张时按右方向键,再等待新页面渲染:
RUN_DIR="$HOME/Desktop/page-run-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$RUN_DIR"
COUNT=50
for ((i=1; i<=COUNT; i++)); do
screencapture -x "$RUN_DIR/page-$(printf "%03d" "$i").png"
if (( i < COUNT )); then
osascript -e 'tell application "System Events" to key code 124'
sleep 1
fi
done
key code 124 表示右方向键。if (( i < COUNT )) 这道保护会阻止最后一页截图后再次按键。
请先测试三页,并在整个任务期间保持目标应用位于最前方。如果焦点改变,System Events 会把方向键发给错误的应用。
防止长任务期间休眠
无人值守时,把脚本放进文件,再通过 caffeinate 启动:
caffeinate -i /bin/zsh "$HOME/Desktop/capture-run.zsh"
脚本运行时,-i 会阻止系统因空闲而休眠。它不能解决屏幕锁定、窗口移动或应用停止更新等问题,因此离开前仍要测试完整流程。
排查 screencapture 循环问题
| 症状 | 检查内容 |
|---|---|
| 图片为空或不完整 | 给“终端”授予屏幕与系统音频录制权限,重新打开并测试 |
could not create image from display | 确认当前会话已登录,且显示器可用 |
| 裁剪位置错误 | 把窗口放到最终位置后更新 -R 坐标 |
| 文件相互覆盖 | 每次运行新建带时间戳的文件夹,并使用唯一的编号文件名 |
| 右方向键发送到了其他位置 | 让目标应用重新获得焦点,并缩短为三页测试 |
| 跳过页面 | 增加按键后的等待时间 |
| 脚本一直运行 | 返回“终端”并按 Control-C |
脚本不再是简单选项时
当坐标固定、只需要原始文件,而且你愿意维护流程时,命令行自动截图很合适。如果每次任务都要调整目标、数量、间隔、按键或检查步骤,可视化界面会更容易使用。
Shotomatic 把这些截图控制和完成的画面放在同一个 Mac 应用中,并支持图片、ZIP、PDF 和 MP4 导出。请参阅 Shotomatic 如何在 Mac 上完成截图自动化。
如果图片已经存在,主要任务只是整理成文件,请参阅如何在 Mac 上把截图保存为 PDF。
常见问题
可以在 Mac 终端中自动截图吗?
可以。macOS 自带 screencapture,可在 Shell 循环中按时间间隔保存全屏或固定区域截图。
如何停止 screencapture 循环?
在运行循环的终端窗口中按 Control-C。已经写入磁盘的截图会保留在输出文件夹中。
screencapture 能保存 JPG 或 PDF,而不是 PNG 吗?
可以。使用 -t 选项指定 jpg、pdf 等支持的格式,并为输出文件使用对应扩展名。
截图脚本能在两次截图之间按键吗?
可以。通过 osascript 和 System Events 发送按键,但只在确有需要时授予辅助功能权限,并让目标应用保持焦点。
相关文章
查看更多文章
如何在 Mac 上用 Automator 重复截图
用 Take Screenshot 和 Loop 搭建 Automator 截图流程;需要按顺序保存文件时,再改用 Shell 操作。



把重复截图整理成可交付成果
Shotomatic 可在 Mac 上捕捉、整理并导出截图会话。