チュートリアル
Shotomatic Team
読了まで約10分

Macのコマンドラインでスクリーンショットを自動撮影する方法

macOSのscreencaptureをループで実行し、全画面、固定範囲、ページ送り付きのスクリーンショットを撮る方法を解説します。安全なファイル名とトラブル対処も紹介します。

MacのTerminalアプリのアイコンとscreencaptureループ

この記事では、macOSのscreencaptureをTerminalから実行し、スクリーンショット撮影を自動化します。権限を確認して1枚を試し、全画面と固定範囲のループを作ります。必要ならページ送りのキー入力も追加し、停止方法とトラブル対処まで確認します。

コマンドを調べる前に権限を確認する

画像が真っ黒になる場合や、保護されたアプリの内容が写らない場合は、Terminalに画面収録アクセスが必要な可能性があります。システム設定 > プライバシーとセキュリティ > 画面収録とシステムオーディオを開いてTerminalを許可し、macOSから求められたらTerminalを開き直します。

スクリーンショットを撮るだけなら、アクセシビリティ権限は不要です。osascriptで別のアプリを操作したり、System Events経由でキーを送ったりするときだけ必要になります。

Terminalからスクリーンショットを1枚撮る

まずは、1つのファイルを保存します。

screencapture -x "$HOME/Desktop/test-screenshot.png"

-xオプションは、スクリーンショットの効果音を鳴らさないための指定です。ファイルが正しく撮れていれば、短いループへ進みます。

主な標準オプションは次のとおりです。

オプション結果
-R x,y,width,height固定した長方形の範囲を撮る
-mメインモニターだけを撮る
-i範囲またはウインドウを対話式に選ぶ
-w対話式でウインドウだけを選べるようにする
-T 5撮影を5秒遅らせる
-t jpgJPG形式で保存する
-C非対話式キャプチャにカーソルを含める

-Tフラグは簡単なスクリーンショットタイマーとして使えます。利用中のmacOSで使えるオプションは、Terminalでman screencaptureを実行して確認してください。

数秒おきに画面全体を撮る

長時間動かす前に、次の3フレームのループを試します。

RUN_DIR="$HOME/Desktop/screenshot-run-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$RUN_DIR"
COUNT=3

for ((i=1; i<=COUNT; i++)); do
  screencapture -x "$RUN_DIR/frame-$(printf "%03d" "$i").png"
  if (( i < COUNT )); then
    sleep 5
  fi
done

ファイルはframe-001.pngframe-002.pngのような順に並びます。条件分岐があるため、最後のスクリーンショットの後に不要な5秒待機は入りません。

本番用にCOUNTを増やす前に、3ファイルすべてを確認します。途中で止めるにはControl-Cを押します。それまでに保存されたファイルは実行用フォルダに残ります。

固定範囲を繰り返し撮る

対象が同じ位置にある場合は、-Rを追加します。

RUN_DIR="$HOME/Desktop/area-run-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$RUN_DIR"
COUNT=20

for ((i=1; i<=COUNT; i++)); do
  screencapture -x -R 100,100,1200,800 "$RUN_DIR/frame-$(printf "%03d" "$i").png"
  if (( i < COUNT )); then
    sleep 5
  fi
done

長方形の形式はx,y,width,heightです。ウインドウを動かしても、コマンドは元の座標を撮り続けます。まず3フレームで試し、ループが終わるまでは対象を動かさないでください。

Retinaディスプレイでは、論理サイズが400x300の範囲から800x600のRetina画像が作られることがあります。コマンドが違う範囲を選んだのではなく、macOSがディスプレイのピクセル密度に合わせて保存した結果です。

PNGではなくJPGで保存する

-t jpg.jpg拡張子を使います。

screencapture -x -t jpg "$HOME/Desktop/test-screenshot.jpg"

インターフェース上の文字や図には、PNGのほうが無難です。写真中心の内容ではJPGのほうが小さくなりますが、細かな文字がにじむことがあります。

最後のページを行き過ぎず、撮影の間にキーを送る

次のページ送り用ループは、まず画面を撮影し、次のキャプチャが残っている場合だけ右矢印キーを送ります。その後、新しいページが描画されるまで待ちます。

RUN_DIR="$HOME/Desktop/page-run-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$RUN_DIR"
COUNT=50

for ((i=1; i<=COUNT; i++)); do
  screencapture -x "$RUN_DIR/page-$(printf "%03d" "$i").png"

  if (( i < COUNT )); then
    osascript -e 'tell application "System Events" to key code 124'
    sleep 1
  fi
done

key code 124は右矢印キーです。if (( i < COUNT ))の条件により、最後のページを撮り終えた後はキーが送られません。

まず3ページで試してください。実行中は対象アプリを前面に保ちます。フォーカスが移ると、System Eventsは別のアプリへ右矢印を送ってしまいます。

長時間実行中のスリープを防ぐ

無人で長く動かす場合は、スクリプトをファイルに保存し、caffeinate経由で起動します。

caffeinate -i /bin/zsh "$HOME/Desktop/capture-run.zsh"

-iオプションは、スクリプトの実行中にアイドル状態のシステムがスリープするのを防ぎます。画面のロック、動かしたウインドウ、更新が止まったアプリまでは直せません。離れる前にワークフローを試してください。

screencaptureループのトラブルシューティング

症状確認すること
画像が真っ黒、または一部しか写らないTerminalに「画面収録とシステムオーディオ」を許可し、開き直して再試行する
could not create image from displayセッションにログイン中で、ディスプレイが利用できることを確認する
切り抜く範囲が違うウインドウを最終位置へ置いてから、-Rの座標を更新する
ファイルが上書きされる新しいタイムスタンプ付きフォルダと、一意の連番ファイル名を使う
右矢印が別の場所へ送られる対象アプリを前面に戻し、テストを3ページに短縮する
ページが飛ばされるキー入力後の待ち時間を長くする
スクリプトが動き続けるTerminalに戻ってControl-Cを押す

スクリプトが簡単な方法ではなくなったら

コマンドラインによるスクリーンショット自動化は、座標が固定され、素材ファイルをそのまま扱い、ワークフローを自分で保守できる場合に向いています。実行ごとに対象、枚数、間隔、キー入力、確認手順を変えるなら、画面上で調整できるインターフェースのほうが扱いやすくなります。

Shotomaticは、こうしたキャプチャ設定と撮影後のフレームを1つのMacアプリにまとめ、画像、ZIP、PDF、MP4へ書き出せます。ShotomaticでMacのスクリーンショットを自動化する方法をご覧ください。

画像がすでに揃っていて、1つのファイルにまとめることが主目的なら、MacでスクリーンショットをPDFに保存する方法に進んでください。

よくある質問

MacのTerminalからスクリーンショットを自動撮影できますか?

はい。macOS標準のscreencaptureをシェルループで実行すると、全画面または固定範囲のスクリーンショットを一定間隔で保存できます。

screencaptureのループを止めるには?

ループを実行しているTerminalウインドウでControl-Cを押します。それまでにディスクへ書き込まれたスクリーンショットは、出力先フォルダに残ります。

screencaptureでPNGではなくJPGやPDFを保存できますか?

はい。-tオプションにjpgやpdfなど対応形式を指定し、出力ファイルにも形式と一致する拡張子を付けます。

スクリーンショット用スクリプトで、撮影の間にキーを送れますか?

はい。System Eventsをosascriptから操作します。ただし、必要な場合にだけアクセシビリティ権限を与え、対象アプリを前面に保ってください。

Macのスクリーンショット自動化とは?

Macのスクリーンショット自動化の意味、手動撮影や画面収録との違い、専用の撮影ワークフローが必要になる場面を解説します。

読了まで約15分
集中してパソコン作業を行うためにノートパソコンとモニターを置いた机

繰り返しのスクリーンショットを完成した成果物に

ShotomaticはMacでスクリーンショットのセッションを撮影、整理、書き出しできます。

Macのコマンドラインでスクリーンショットを自動撮影する方法 | ブログ | Shotomatic