screencaptureはmacOS標準搭載のスクリーンショット・画面収録コマンド。Command+Shift+3などのキーボードショートカットと同じ撮影を、ターミナルやスクリプトから実行できる。ここでは画面全体を撮影してファイルやクリップボードに保存する基本的な使い方をまとめる。
事前準備
ターミナルからscreencaptureを実行するには、ターミナルアプリに画面収録の権限が必要である。システム設定の「プライバシーとセキュリティ」→「画面収録とシステムオーディオ録音」で、使用するターミナルアプリ(ターミナル.appやiTerm2など)を許可する。
画面全体をファイルに保存する
screencapture <ファイル名>の形式で実行する。画面全体がPNG形式で保存される。
$ screencapture full.png
$ file full.png
full.png: PNG image data, 3440 x 1440, 8-bit/color RGBA, non-interlaced
同名のファイルがすでに存在する場合、確認なしで上書きされる。
保存先のディレクトリが存在しない場合はエラーになる。ただし、終了ステータスは0のままである。スクリプトで使う場合は、終了ステータスではなくファイルの有無で成否を判定する。
$ screencapture nodir/a.png
screencapture: cannot write file to intended destination, nodir/a.png
$ echo $?
0
ファイル名の拡張子で形式は決まらない
画像の形式はファイル名の拡張子では決まらない。.jpgを付けて保存しても、中身はPNG形式である。
$ screencapture x.jpg
$ file x.jpg
x.jpg: PNG image data, 3440 x 1440, 8-bit/color RGBA, non-interlaced
拡張子なしのファイル名を指定した場合も、そのままのファイル名でPNG形式の画像が保存される。PNG以外の形式で保存するには-tオプションを使う。
参考: 【screencapture】-tで画像形式を指定する
-xでシャッター音を鳴らさない
デフォルトでは撮影時にシャッター音が鳴る。-xを指定すると音を鳴らさずに撮影する。スクリプトから定期的に撮影する場合などに使う。
$ screencapture -x full.png
-cでクリップボードに保存する
-cを指定すると、ファイルではなくクリップボードに保存する。Command+Control+Shift+3と同じ動作である。
$ screencapture -c
-cを指定した場合はファイル名を指定しても無視され、ファイルは作成されない。
クリップボードに入った画像は、ほかのアプリに貼り付けて使える。AppleScriptのclipboard infoで、クリップボードの中身を確認できる。
$ osascript -e 'clipboard info'
«class PNGf», 1570370, «class AVIF», 204652, «class 8BPS», 5548344, GIF picture, 407518, «class jp2 », 716249, JPEG picture, 514108, TIFF picture, 19819118, «class BMP », 19814538, «class TPIC», 3590822
-cとファイル名のどちらも指定しない場合は、エラーになる。
$ screencapture
screencapture: no file specified
複数のディスプレイは1ディスプレイ1ファイルで保存する
複数のディスプレイを接続している場合、ディスプレイの数だけファイル名を指定する。1つ目のファイルにメインディスプレイ、2つ目のファイルに2枚目のディスプレイが保存される。
$ screencapture main.png sub.png
$ file main.png sub.png
main.png: PNG image data, 3440 x 1440, 8-bit/color RGBA, non-interlaced
sub.png: PNG image data, 2204 x 1484, 8-bit/color RGBA, non-interlaced
ファイル名を1つだけ指定した場合は、メインディスプレイだけを保存する。
ディスプレイの数よりも多いファイル名を指定した場合、余ったファイル名は無視される。ディスプレイが2枚の環境でscreencapture a.png b.png c.pngを実行すると、c.pngは作成されない。
特定のディスプレイだけを撮影する方法は以下を参照。
参考: 【screencapture】-D・-mで撮影するディスプレイを指定する
