教程
Shotomatic Team
约 8 分钟阅读

在 Mac 上用命令行自动截图

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

Mac 终端应用图标和 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.pngframe-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 的逻辑矩形可能生成 800x600Retina 截图。命令选取的区域没有错误,只是 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 内置工具自动截图

使用 screencapture、Automator 或“快捷指令”在 Mac 上自动截图,包括权限设置、安全循环与故障排查。

约 10 分钟阅读
用于重复截图的 Mac 多显示器桌面

什么是 Mac 截图自动化?

了解 Mac 截图自动化的含义、它与手动截图和录屏的区别,以及何时需要专用采集工作流。

约 13 分钟阅读
配有笔记本电脑和显示器、用于专注工作的桌面空间

把重复截图整理成可交付成果

Shotomatic 可在 Mac 上捕捉、整理并导出截图会话。

在 Mac 上用命令行自动截图 | 博客 | Shotomatic