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の値 | 保存される形式 |
|---|---|
png | PNG(デフォルト) |
jpg・jpeg | JPEG |
heic | HEIC |
avif | AVIF |
pdf | |
tiff・tif | TIFF |
gif | GIF |
bmp | BMP |
jp2 | JPEG 2000 |
psd | Photoshop形式 |
tga | Targa形式 |
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 |
| 約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
