macOS自带截图命令ScreenCapture

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

友情提示

见原文:macOS自带截图命令ScreenCapture

本文同步自微信公众号 "程序员小溪" ,这里只是同步,想看及时消息请移步我的公众号,不定时更新我的学习经验。

相关推荐
TESmart碲视8 小时前
Mac 真正多显示器支持:TESmart USB-C KVM(搭载 DisplayLink 技术)如何实现
macos·计算机外设·电脑
2501_9151063221 小时前
Xcode 上传 ipa 全流程详解 App Store 上架流程、uni-app 生成 ipa 文件上传与审核指南
android·macos·ios·小程序·uni-app·iphone·xcode
他们都不看好你,偏偏你最不争气1 天前
【iOS】AFNetworking
开发语言·macos·ios·objective-c
钟念1 天前
【打包app】uniapp打包ios端和安卓端app
macos·objective-c·cocoa
森之鸟2 天前
Mac电脑上如何打印出字体图标
前端·javascript·macos
m_136872 天前
Mac M 系列芯片 YOLOv8 部署教程(CPU/Metal 后端一键安装)
yolo·macos
搜狐技术产品小编20232 天前
CAEmitterLayer:iOS 中创建炫酷粒子效果的魔法工具
macos·ios·objective-c·cocoa
未来之窗软件服务3 天前
操作系统应用开发(七)mac苹果模拟器——东方仙盟练气期
macos·仙盟创梦ide·东方仙盟·系统模拟器
liliangcsdn3 天前
Mac本地docker安装Kibana+ElasticSearch
elasticsearch·macos·docker