screencaptureの-Rオプションを使うと、画面上の矩形の範囲を座標で指定して撮影できる。マウスで範囲を選択する必要がないため、毎回同じ範囲を撮影したい場合やスクリプトから撮影する場合に便利である。

screencaptureの基本的な使い方は以下を参照。

参考: 【screencapture】コマンドで画面全体のスクリーンショットを撮る

-Rで範囲を指定する

-R <x>,<y>,<幅>,<高さ>の形式で指定する。値はカンマで区切り、スペースを入れない。

$ screencapture -R 100,200,300,400 rect.png
$ file rect.png
rect.png: PNG image data, 300 x 400, 8-bit/color RGBA, non-interlaced

-R100,200,300,400のように、オプションと値の間のスペースは省略できる。

座標系

座標の原点は、メインディスプレイの左上である。x軸は右方向、y軸は下方向に増える。メニューバーも座標に含まれるため、yが0の位置はメニューバーの上端になる。

座標の単位はピクセルではなくポイントである。Retinaディスプレイでは1ポイントが2ピクセルになるため、指定した幅と高さの2倍のピクセル数の画像になる。

以下は、メインディスプレイの左側にRetinaディスプレイ(Sidecarで接続したiPad)を配置した環境で撮影した例。Retinaディスプレイ上の100x100ポイントの範囲が、200x200ピクセルの画像になる。

$ screencapture -R -1102,0,100,100 retina.png
$ file retina.png
retina.png: PNG image data, 200 x 200, 8-bit/color RGBA, non-interlaced

メインディスプレイの左側や上側にあるディスプレイは、負の座標で指定する。

範囲が複数のディスプレイにまたがる場合も、1つの画像として保存される。Retinaディスプレイを含む範囲では、Retinaではないディスプレイの部分も2倍に拡大され、全体が2倍のピクセル数になる。

$ screencapture -R -100,0,200,100 span.png
$ file span.png
span.png: PNG image data, 400 x 200, 8-bit/color RGBA, non-interlaced

ウインドウの位置を調べて撮影する

AppleScriptでウインドウの位置と大きさを取得し、-Rに渡すと、そのウインドウがある範囲を撮影できる。以下はTextEditのウインドウの位置を調べて撮影する例。

$ osascript -e 'tell application "System Events" to tell process "TextEdit" to get {position, size} of front window'
200, 150, 800, 500
$ screencapture -R 200,150,800,500 textedit.png

osascriptの出力はx, y, 幅, 高さの順である。System Eventsでウインドウの情報を取得するには、ターミナルアプリにアクセシビリティの権限が必要である。

撮影した画像は以下の通り。

TextEditのウインドウの範囲を撮影した画像

-Rは画面上の範囲をそのまま撮影するため、指定した範囲に重なっているほかのウインドウも写る。ウインドウだけを撮影したい場合は、-lでウインドウIDを指定する。

参考: 【screencapture】-lでウインドウを指定して撮影する

画面からはみ出した範囲

指定した範囲がディスプレイからはみ出す場合、ディスプレイと重なる部分だけを撮影する。3440x1440のディスプレイで-R 3000,1000,1000,1000を指定すると、440x440の画像になる。

$ screencapture -R 3000,1000,1000,1000 over.png
$ file over.png
over.png: PNG image data, 440 x 440, 8-bit/color RGBA, non-interlaced

座標に負の値も指定できる。-R -100,-100,300,300は、画面と重なる200x200の範囲を撮影する。

範囲がどのディスプレイとも重ならない場合は、エラーになる。

$ screencapture -R 4000,0,100,100 none.png
rect (4000.0, 0.0, 100.0, 100.0) does not intersect any displays

指定できない値

幅や高さに0を指定した場合や、値が4つそろっていない場合はエラーになる。

$ screencapture -R 0,0,0,0 zero.png
screencapture: -R requires a valid rect (x,y,w,h)
$ screencapture -R 0,0,100 short.png
screencapture: -R requires a valid rect (x,y,w,h)

小数は指定できる。-R 10.5,10.5,100.5,100.5を指定すると、101x101の画像になる。

参考

ScreenCapture Command: Capture an image of the screen in macOS