screencaptureはデフォルトでPNG形式の画像を保存する。-tオプションを使うと、JPEGやPDF、HEICなどの形式で保存できる。ここでは-tで指定できる形式と、-rでDPIのメタデータを付けずに保存する方法をまとめる。

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

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

-tで画像形式を指定する

-t <形式>の形式で指定する。以下はJPEG形式で保存する例。

$ screencapture -t jpg shot.jpg
$ file shot.jpg
shot.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 72x72, segment length 16, Exif Standard: [TIFF image data, big-endian, direntries=4, xresolution=62, yresolution=70, resolutionunit=2], baseline, precision 8, 3440x1440, components 3

screencaptureはファイル名の拡張子を見て形式を決めない。拡張子を.jpgにしても、-tを指定しなければPNG形式で保存される。ファイル名の拡張子と-tの形式は自分でそろえる。

指定できる形式

man screencaptureには「pdf, jpg, tiffなど」としか書かれていない。macOS 26.6で-tに指定して保存できた形式は以下の通り。

-tの値保存される形式
pngPNG(デフォルト)
jpg・jpegJPEG
heicHEIC
avifAVIF
pdfPDF
tiff・tifTIFF
gifGIF
bmpBMP
jp2JPEG 2000
psdPhotoshop形式
tgaTarga形式

heif・webp・pict・icoは指定できるものの、保存に失敗する。エラーメッセージは保存先の問題のように見えるが、原因は形式である。

$ screencapture -t webp shot.webp
screencapture: cannot write file to intended destination, shot.webp
$ screencapture -t ico shot.ico
screencapture: failure to write data to path, shot.ico

いずれの場合も終了ステータスは0である。

存在しない形式を指定した場合は、何も出力せずに終了ステータス1で終了する。

$ screencapture -t foo shot.foo
$ echo $?
1

形式ごとのファイルサイズ

3440x1440のディスプレイ全体を撮影したときのファイルサイズを比較した。画面の内容によって変わるため、目安として示す。

形式ファイルサイズ
HEIC約230KB
JPEG約510KB
PDF約1.6MB
PNG約1.7MB
TIFF約19.8MB

TIFFは圧縮せずに保存するため、ほかの形式よりも大幅に大きい。ファイルサイズを抑えたい場合はHEICやJPEGを使う。

-rでDPIのメタデータを付けない

screencaptureは、撮影した画像にディスプレイのDPIをメタデータとして書き込む。Retinaディスプレイを撮影した画像には144dpiが記録される。-rを指定すると、DPIのメタデータを付けずに保存する。

以下はRetinaディスプレイ(Sidecarで接続したiPad)を-D 2で撮影し、sipsでDPIを確認した例。

$ screencapture -D 2 a.png
$ screencapture -D 2 -r b.png
$ sips -g dpiWidth -g dpiHeight a.png b.png
/path/to/a.png
  dpiWidth: 144.000
  dpiHeight: 144.000
/path/to/b.png
  dpiWidth: 72.000
  dpiHeight: 72.000

-rなしのPNGには、解像度を表すpHYsチャンクが入る。-rを指定するとpHYsチャンクが入らず、sipsはデフォルト値の72dpiを表示する。

Retina以外のディスプレイを撮影したPNGには、-rの有無にかかわらずpHYsチャンクが入らない。

JPEG形式でも同様である。Retinaではないディスプレイで比較すると、-rなしではExifに解像度(xresolution・yresolution・resolutionunit)が入る。-rを指定すると、解像度のタグが入らない。

$ screencapture -t jpg a.jpg
$ screencapture -r -t jpg b.jpg
$ file a.jpg b.jpg
a.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 72x72, segment length 16, Exif Standard: [TIFF image data, big-endian, direntries=4, xresolution=62, yresolution=70, resolutionunit=2], baseline, precision 8, 3440x1440, components 3
b.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 72x72, segment length 16, Exif Standard: [TIFF image data, big-endian, direntries=1], baseline, precision 8, 3440x1440, components 3

参考

ScreenCapture Command: Capture an image of the screen in macOS