ScreenCapture简介
ScreenCapture 是 macOS 系统自带的命令行工具,用于截取屏幕截图或录制屏幕视频。它提供了丰富的选项,可以满足多种截图和录屏需求。
help(查看帮助)
在命令行终端执行help指令可以查看 ScreenCapture 提供的所有指令信息
shell
$ screencapture --help

翻译后大致功能如下:
diff
-a 不包括附加到选定窗口的窗口
-b 捕获触控栏(-i模式下无效)
-c 强制截图保存到剪贴板而不是文件中
-C 截图时保留光标(-i模式下无效)
-d 向用户以图形方式显示错误
-D<display>指定截图的显示器
-i 交互模式截取屏幕。可以是选区或者是窗口。
control - 截图保存到剪贴板
space - 在鼠标选区模式和窗口模式间切换
escape - 退出截图
-I 在短信中打开截图
-m 只截取主显示器(-i模式下无效)
-M 截图完毕后,会打开邮件客户端,图片会存在于邮件正文中
-o 在窗口模式下,不截取窗口的阴影
-p 屏幕截图将使用默认设置进行捕获,文件参数将被忽略
-P 截图完毕后,图片在图片预览中打开,视频在QuickTime Player在打开预览
-s 只允许鼠标选取模式
-S 窗口模式下,截取屏幕而不是窗口
-t<format> 指定图片格式,模式是png。可选的有pdf, jpg, tiff等
-T<seconds> 延时截取,默认为5秒。
-w 只允许窗口截取模式
-W 开启交互截取模式(默认为窗口模式),开启后可以进行选取和窗口模式切换
-x 不播放声效
-r 不向图片中加入dpi信息
-l<windowid> 抓取指定windowid的窗口截图
-R<x,y,w,h> 抓取指定区域的截图
-B<bundleid> 截图输出会被bundleid指出的程序打开
-v 录制屏幕的视频
-V<seconds>将视频捕获限制在指定的秒数
-g 在视频录制过程中使用默认输入捕获音频。
-G<id> 在视频录制过程中使用指定的音频ID捕获音频。
-K 在视频录制中显示鼠标点击
-x 不播放声音
-u 在屏幕捕获完成后显示用户界面。通过命令行传递的文件将被忽略。
-U 交互模式下显示工具栏
非交互式截图
全屏截图到文件
ruby
# 截全屏到默认路径
$ screencapture output.png
# 截全屏到指定路径
$ screencapture ~/Desktop/output.png
使用screencapture截全屏默认会保存到 /Users/username/ 路径下

全屏截图到剪切板
- -c:强制截图保存到剪贴板而不是文件中
- -C:截图时保留光标(只在非交互模式下有效,非交互模式为不需要手动选取操作,如截全屏)
php
# 截图保存到剪贴板
$ screencapture -c
# 截图时保留光标
$ screencapture -cC
从截图效果可以看到一个不带光标,一个不带光标


截取特定窗口
如果想在非交互模式下截图指定窗口,可以通过-t参数实现
- -l:抓取指定windowid的窗口截图
windowid是应用程序窗口的ID,这里以 iTerm 为例,在 osascript 编辑器中运行如下脚本获取所有iTerm的window ID
vbnet
tell application "iTerm"
set winList to every window
if (count of winList) is 0 then
return "没有找到窗口"
else
set allWindowIDs to {}
repeat with currentWindow in winList
try
set winID to id of currentWindow
set end of allWindowIDs to winID
on error errMsg
set end of allWindowIDs to "无法获取ID: " & errMsg
end try
end repeat
return allWindowIDs
end if
end tell
获取到window ID后,执行命令
lua
$ screencapture -l19647 output.png
截图就只会截取当前应用窗口的内容

截取特定区域
- -R<x,y,w,h>:抓取指定区域的截图
ScreenCapture可以通过指定一个固定的区域完成截图,格式如下:
diff
-R<水平坐标x,垂直坐标y,截图宽度,截图高度>
lua
$ screencapture -R100,100,600,400 output.png
设置完成后,我们可以得到如下截图效果

交互式截图
选择区域或窗口
选择区域或窗口截图需要使用-i参数,可以配置 control、space、esc 完成不同的操作
- -i:交互模式截取屏幕。可以是选取区域或是窗口。
- control(ctr键):截图保存到剪贴板
- space(空格键):在鼠标选区模式和窗口模式(鼠标指针变为相机图标)间切换
- esc(退出键):退出截图
在终端输入如下命令光标会变成【+】选取状态,点击鼠标左键拖拽即可完成截图
css
$ screencapture -i output.png
没法截图看效果,这里描述一下:
- 截图过程中按下【ctr】键,截图会被保存到剪切板;
- 截图过程按下【space】空格键,可以切换鼠标区域选择和窗口截图模式;
- 截图过程按下【esc】键会退出截图模式。
仅允许选择区域
只允许选取模式这里需要用到 -s 参数(-s只允许鼠标选择模式),当我们在终端使用-s将无法再次使用【space】空格键切换窗口模式
csharp
# 交互式选取区域,无法选择窗口
$ screencapture -is output.png
仅允许选择窗口
只允许选取模式这里需要用到 -w 参数(-w只允许窗口截取模式),当我们在终端使用 -w 将无法再次使用【space】空格键切换区域选取模式
php
# 交互式选取窗口或屏幕,二者不会同时包含
$ screencapture -iw output.png
窗口模式下使用 -S 参数(-S窗口模式下,截取屏幕而不是窗口,本人测试可以截图窗口或屏幕,截取屏幕两者可以同时包含,不知道是不是使用的不对)
lua
$ screencapture -iwS output.png
指定显示器
如果有多个显示器,可以通过 -D+number 指定截取的显示器,-D1是主显示器,-D2是第二个显示器,以此类推。
php
# 截取指定显示器
$ screencapture -D1 output.png
截取主显示器可以通过 -m 参数:
php
# 截取主显示器
$ screencapture -m output.png
指定格式和延迟
指定输出格式
有时我们需要其他类型的截图,可以通过 -t 参数进行设置
- -t:指定图片格式,模式是png,可以指定其他格式,如
jpg、pdf、tiff 等
php
# 默认设置指定后缀也可以实现
$ screencapture -tpdf output.pdf
设置延迟
某些场景需要设置延迟截图,可以通过 -T 参数设置
- -T:延时截取,默认为5秒
lua
$ screencapture -T2 output.png
截图预览
在图片预览中预览
使用 -p 截图预览,会在截图后在屏幕右下角展示预览效果,同时将文件保存到桌面
php
# 截全屏保存到桌面
$ screencapture -p output.png
# 选取截图保存到桌面
$ screencapture -ip output.png

在邮件中预览
如果想截图后发送邮件可以配置 -M 参数快速将截图通过邮件发送
php
# 截取全屏发送邮件
$ screencapture -M output.png
# 选取截屏发送邮件
$ screencapture -iM output.png

在短信中预览
php
# 截图在短信中展示
$ screencapture -I output.png

在QuickTime Player中预览
php
# 截全屏保存到桌面
$ screencapture -v -P output.mp4
# 选取截图保存到桌面
$ screencapture -vP output.mp4
录制完成后就会使用QuickTime Player打开

录制屏幕
录制全屏视频
录制视频需要使用 -v 参数:
- -v:录制屏幕的视频
lua
$ screencapture -v output.mp4
录制结束使用 ctrl-c 结束录制

限制录制时长
限制视频录制时长可以使用 -V 参数:
- -V:将视频捕获限制在指定的秒数
php
# 录制30s视频
$ screencapture -v -V30 output.mp4
或者
$ screencapture -vV30 output.mp4
录制音频
使用默认音频
屏幕录制 -v 参数录制的视频默认是没有音频的,如需录制音频需要使用 -g 参数:
- -g:在视频录制过程中使用默认输入捕获音频。
php
# 录制带音频的视频
$ screencapture -v -g output.mp4
或者
$ screencapture -vg output.mp4
使用指定音频ID
- -G:在视频录制过程中使用指定的音频ID捕获音频
shell
$ screencapture -v -G<id> output.mp4
其他操作
视频录制中显示鼠标点击
lua
$ screencapture -v -k output.mp4
交互模式下显示工具栏
css
$ screencapture -U -i output.png
和使用系统的截屏工具效果一致

使用场景
录制60s音视频
lua
$ screencapture -v -g -V60 output.mp4
或者
$ screencapture -vgV60 output.mp4
截取主屏幕拷贝到剪切板
php
$ screencapture -m -c
或者
$ screencapture -mc
截取窗口不显示阴影
lua
$ screencapture -i -o -w output.png
或者
$ screencapture -io -w output.png
友情提示
本文同步自微信公众号 "程序员小溪" ,这里只是同步,想看及时消息请移步我的公众号,不定时更新我的学习经验。