Mac で Automator を使って連続スクリーンショットを撮る方法
Take Screenshot と Loop を使った Automator のスクリーンショット ワークフローを作成し、連番のファイルが必要な場合はシェルアクションを使用します。
13分で読めます生産性作成者:Temposhot Team
Automator は macOS に標準で含まれており、追加のソフトウェアなしで連続したスクリーンショットを撮れます。アクションを 2 つか 3 つ組み合わせたワークフローで、画面のキャプチャ、待機、繰り返しを行います。この記事では、そのワークフローを 2 通りの方法で作成し、アプリとして保存する手順を説明します。また、専用のキャプチャツールの方が手間が少ない場面も挙げます。
Automator の画面収録アクセスを確認する
macOS は画面収録を保護された権限として扱います。ワークフローが初めて画面を撮影するとき、macOS は Automator による画面の記録を許可するかどうかを尋ねます。拒否した場合、または確認ダイアログが表示されない場合、保存されたファイルには壁紙とメニューバーしか写りません。
System Settings を開き、Privacy and Security を選択して、画面収録の一覧を探します。一覧の表示名は macOS のバージョンによって異なります。Automator をオンにしたら、Automator を終了して開き直します。
保存したワークフローのアプリは、その一覧の中で別の項目として扱われます。Automator に権限があっても、アプリは初回実行時に独自の権限を必要とします。
壁紙だけが写る理由
画面収録の権限がない場合でも撮影自体は成功しますが、プロセスが見られる内容、つまりデスクトップの背景画像とメニューバーだけが返されます。エラーは表示されません。そのため、最初のテストでは枚数を数えるだけでなく、必ず画像を開いて確認します。数 MB を想定していたのに数百 KB しかないファイルは、アプリのウィンドウが写っていないことを示す手がかりになります。
保存したアプリの移動や名前変更
macOS は権限の項目をアプリに紐付けます。ワークフローを作り直したり、別の名前で保存し直したり、別のフォルダへ移動したりすると、macOS は新しいアプリとして扱います。その場合、再度許可を求められるか、古い項目を削除して新しい項目を追加するまで、黙ってアクセスが拒否されることがあります。最初の本番実行の前に、最終的な名前と保存先を確定します。
ネイティブアクションとシェルアクションを選ぶ
Automator で同じ結果を得る方法は 2 通りあります。
- ネイティブアクション: 「Take Screenshot」アクションと「Loop」アクションを使います。コードは不要ですが、ファイル名と撮影範囲の制御は限られます。
- シェルアクション: 「Run Shell Script」アクションから
screencaptureコマンドを呼び出します。数行のシェルスクリプトが必要ですが、ファイル名、形式、撮影範囲を正確に指定できます。
簡単な動作確認にはネイティブアクションを使います。ファイルが互いに上書きされる場合や、撮影範囲を固定する必要がある場合は、シェルアクションに切り替えます。
Terminal でコマンドを先にテストする
Automator にシェルの行を貼り付ける前に、Terminal で一度実行します。screencapture -x ~/Desktop/test.png を実行すると、デスクトップに 1 つのファイルが作成され、シャッター音は鳴りません。壁紙だけの画像になる場合、Terminal に画面収録の権限がないことを示します。これは Automator の権限とは別の項目です。コマンドが Terminal で動けば、Automator 内で残る問題は Automator 自体の権限かパスの指定のどちらかに絞られ、どちらも切り分けが速く行えます。
方法 1: Take Screenshot と Loop を使う
ワークフローを作成する
Applications フォルダから Automator を開き、新規の Workflow 書類を作成します。
Take Screenshot を追加する
ライブラリで「screenshot」を検索し、Take Screenshot をワークフローにドラッグします。画面全体を撮影する設定を選び、このジョブ専用のフォルダを保存先に指定します。使用できるオプションは macOS のバージョンによって異なります。
一時停止を追加する
Pause アクションを追加し、待機時間を設定します。例として 3 秒を指定します。
ループを追加する
最後に Loop を追加します。自動でループする設定にし、10 回などの回数、または数分の経過で停止するように選択します。
短いテストを実行する
回数を 3 に設定し、Run を選択してフォルダを開きます。
テスト後にファイル名を確認します。アクションが毎回同じ名前で書き込む場合、撮影のたびに前のファイルが置き換えられ、結果として 1 つのファイルしか残りません。日時を付加する Finder の名前変更アクションを追加すると回避できますが、並べ替えには連番の方が扱いやすいです。方法 2 ではこの問題を直接解決します。
ループ 1 回の所要時間
Pause アクションが制御するのは、サイクルの一部だけです。各回には画像を書き出す時間もかかり、5K ディスプレイでは全画面 PNG の保存に無視できない時間がかかる場合があります。待機 3 秒のループを 10 回実行すると、待機だけで 30 秒かかり、実際の実行時間はそれより少し長くなります。1 ページめくるごとに 1 フレームを撮るような、時間に厳密なジョブでは、設定値に頼らず、ストップウォッチで 1 回の実行を計測し、待機時間を調整します。
Rename Finder Items で連番名にする
ネイティブアクションのみを使う場合、Rename Finder Items アクションに連番を付けるモードがあります。このアクションは渡されたファイルに対して動作するため、ワークフローは毎回新しいスクリーンショットを渡す必要があります。ループ内でこれを行うのは手間がかかります。より簡単な方法は、ネイティブのループで日時付きの名前を付けながら空のフォルダへ保存し、その後、名前順に全ファイルへ連番を振る 1 回限りの別ワークフローを実行することです。
方法 2: Run Shell Script と Automator の Loop を組み合わせる
Take Screenshot を Run Shell Script に置き換え、Pause と Loop はそのまま残します。シェルを zsh に設定したアクションに、次のコードを貼り付けます。
dir=~/Captures/automator
mkdir -p "$dir"
n=$(ls "$dir" | wc -l | tr -d ' ')
screencapture -x -t png "$dir/frame-$(printf %04d $((n + 1))).png"
各回でフォルダ内のファイル数を数え、次の番号を書き込みます。そのため、フレームは撮影順に並びます。frame-0001.png、frame-0002.png のようになります。-x フラグはシャッター音をオフにします。ファイル名の前に -R 0,0,1440,900 を追加すると、画面全体ではなく固定された範囲を撮影します。
新しいジョブを始める前に、フォルダを空にするか dir を変更します。そうしないと、前回の実行から番号が続いてしまいます。
固定範囲の座標
-R の後の値は、メインディスプレイの左上を原点とした x、y、幅、高さで、単位はポイントです。Retina ディスプレイでは、保存される画像は縦横それぞれ 2 倍のピクセル数になります。そのため -R 0,0,1440,900 は 2880 × 1800 の画像を生成します。数値を調べるには Shift+Command+4 を押します。十字カーソルの横に、ポインタの座標が表示されます。範囲の左上と右下の角の座標を控え、Escape でキャンセルし、差を計算して幅と高さを求めます。4 つの数値を控え、実行のたびに対象ウィンドウを同じ位置に保ちます。
フレームの間にページめくりを追加する
スライドやページを撮影するには、各フレームの後にキーを押す必要があります。シェルアクションの後に Run AppleScript アクションを追加します。
on run {input, parameters}
tell application "System Events" to key code 124
return input
end run
キーコード 124 は右矢印キーです。キー入力は最前面のアプリに送られるため、実行前に対象アプリを前面に出し、実行中は Mac を操作しないようにします。保存したアプリは、System Events がキーを送るために Accessibility の権限を必要とします。
1 フレーム 1 分のジョブ
2 時間のデプロイ中にダッシュボードを監視するような低速なジョブでは、Pause を 60 秒に設定し、Loop を 120 分で停止するように設定します。ループは回と回の間に時間制限を確認するため、制限を過ぎた最初の回で終了し、約 120 フレームが生成されます。各フレームは全画面画像なので、先に空きディスク容量を確認します。実行中は、Automator のウィンドウまたは保存したアプリが全時間を占有します。途中で停止するとワークフローは終了し、保存済みのフレームはフォルダに残ります。
複数のディスプレイ
screencapture にファイル名を 1 つだけ指定すると、メインディスプレイのみが撮影されます。-D 2 を指定すると 2 番目のディスプレイを撮影し、2 つのファイル名を渡すと、1 回の実行で両方のディスプレイを保存できます。ディスプレイの番号は System Settings の配置に従い、ディスプレイを接続し直すと変わることがあります。長時間の実行の前に、各ディスプレイのフレームを 1 枚ずつ確認します。
再利用可能な Automator アプリとして保存する
File から Save を選び、ファイル形式に Application を選択します。アプリは Applications フォルダなど、場所が変わらない場所に保存します。ダブルクリックするだけで、Automator を開かずにワークフローを実行できます。
保存したアプリを初めて実行すると、アプリ自身の画面収録の確認ダイアログが表示されます。ワークフローが AppleScript でキーを送る場合、アプリにはさらに Accessibility の権限が必要です。
キーボードショートカットから実行する
Automator の Quick Action には、キーボードショートカットを割り当てられます。書類の種類として Quick Action を新規作成し、入力は no input、対象は any application に設定します。同じアクションを追加して保存します。次に、System Settings のキーボードショートカットの項目を開き、サービスの中からそのアクションを見つけて、ショートカットを割り当てます。このショートカットは任意のアプリからループを開始できるため、対象アプリを前面に保つ必要があるページめくりのジョブで便利です。
ワークフローのトラブルシューティング
| 症状 | 考えられる原因 | 対処 |
|---|---|---|
| 壁紙だけが写る | 画面収録の権限がない | Automator または保存したアプリを許可し、開き直す |
| 多数のループ後にファイルが 1 つだけ | 固定のファイル名が毎回上書きされる | 方法 2 を使うか、名前変更のステップを追加する |
| ループが 1 回しか実行されない | ループが毎回確認する設定になっている | 自動でループする設定に切り替える |
| 2 番目のディスプレイが写らない | 1 つのディスプレイだけを全画面で撮影している | -D 1 と -D 2 でディスプレイごとに撮影する |
| フレームが真っ黒 | 実行中にディスプレイがスリープした | 実行中は Mac がスリープしないようにする |
ワークフローのログを読む
実行が途中で止まった場合、Automator ウィンドウのログに失敗したアクションとそのエラーメッセージが表示されます。エラーで終了したシェルアクションはループを止めます。よくある原因は、~/My Captures のように空白を含むパスを引用符で囲んでいないことです。上記のスクリプトのように "$dir/..." の引用符を残します。もう一つの原因は、保存したアプリの実行時に外付けドライブ上のフォルダがマウントされていなかったことです。
Mac をスリープさせない
長いループは、ディスプレイのスリープタイマーより長く続くことがあります。caffeinate コマンドは、別のコマンドの実行中に Mac をスリープさせません。caffeinate -d はディスプレイのスリープを防ぎます。実行前に Terminal で起動し、終了後に Control+C で停止する方法が最も簡単です。別の方法として、ジョブの間だけ System Settings でディスプレイのスリープ時間を延ばすこともできます。
Automator では対応できない場合
Automator は、決まった回数を一定の間隔で実行する用途に向いています。次の一般的な要件には追加の作業が必要です。
- フレーム間のキー入力: ページをめくるには、System Events を通じてキーを送る AppleScript のステップと、Accessibility の権限が必要です。
- 時刻での停止: Loop アクションは回数または分数を数えます。18:30 で停止するには、スクリプトで日時の判定が必要です。
- 一時停止と再開: 途中で停止すると、ワークフロー全体が終了します。
- 検索可能な出力: Automator は画像を PDF にまとめられますが、OCR がないため、PDF にはテキスト層がありません。
Temposhot の Auto Capture は、これらを設定項目として扱います。各サイクルでスクリーンショットを保存し、任意の Key press を送信し、指定の間隔だけ待機します。停止条件は Screenshots、Duration、End time から選択でき、フローティングツールバーで一時停止、再開、終了を操作します。書き出しには検索可能な PDF と MP4 が含まれます。キー入力の自動化、Duration、End time、およびセッションごとのスクリーンショットの無制限利用には Temposhot Pro が必要です。
同じジョブを Auto Capture の設定で行う
上記のページめくりワークフロー(右矢印キーと 2 秒の待機で 40 フレーム)は、4 つの設定項目に対応します。カウントダウンだけは Automator に相当する機能がありません。選択肢は None、3 s(既定値)、5 s、10 s で、最初のフレームの前に、対象の閲覧アプリを最初のページに移動する時間を確保します。Stop condition を Screenshots に設定して 40 を指定し、Interval を 2 秒、Key press を Right Arrow、Countdown を 3 s に設定します。その後、Windows タブでウィンドウを選択します。Temposhot は実行開始時にそのウィンドウを前面に出すため、キーが対象に届きます。このジョブを頻繁に実行する場合、Save Current Setup で 4 つの値をプリセットとして保存できます。
18:30 で必ず停止するジョブでは、Stop condition を End time に設定し、ローカル時間を指定します。一時停止しても終了時刻は変わらないため、20 分の一時停止を挟んでも、実行は 18:30 に終了します。Automator の方法では、時計を読み取ってループを終了させるスクリプトが必要です。
300 フレームのページジョブの手間
撮影が許可されているドキュメントの 300 ページを、ページごとに 1 フレームずつ、ページの間に右矢印キーを送って撮影する場合を考えます。Automator では、番号付きのファイル名を付けるシェルアクション、AppleScript のキー入力ステップ、保存したアプリへの Accessibility の権限、十字カーソルで測定した範囲、さらに PDF を作る別のステップが必要です。PDF にもテキスト層はありません。途中で中断すると実行が終了し、再開にはフレーム数と開始番号の調整が必要です。Auto Capture では、同じジョブは 4 つの設定項目と、ウィンドウの選択だけで済みます。実行はフローティングツールバーから一時停止と再開ができ、PDF の書き出しには OCR によるテキストが含まれます。違いは撮影の品質ではなく、撮影の周辺にある手間の量です。
Automator が適している場合
次の場合は、Automator が引き続き適しています。Mac にアプリをインストールできない環境でジョブを実行する必要がある場合、出力が生の画像ファイルだけで足りる場合、またはキャプチャが、ファイルの移動、画像のリサイズ、メール送信を行うより大きなワークフローの 1 つのステップである場合です。これらの場合、方法 2 のシェルアクションと番号付きのファイル名が最も信頼できる構成要素です。
40 フレームのジョブの時間計算
3 秒のカウントダウンと 2 秒の間隔では、40 フレームのジョブは合計で約 83 秒待機します。内訳は最初のフレームの前の 3 秒と、80 秒の間隔です。各キャプチャにかかる時間は含みません。Automator 版では、各回の保存時間も加算されるため、実際の実行時間は待機の設定だけより長くなります。Temposhot の実行を開始し、終了時にフレームを数えて 40 枚であることを確認します。数が異なる場合は、次の実行の前に停止条件を確認します。
Temposhot の実行をトラブルシューティングする
| 症状 | 考えられる原因 | 対処 |
|---|---|---|
| キー入力が効かない | Accessibility が許可されていない、または macOS がキーをグローバルに処理している | Accessibility を許可し、キーを使った短いテストを実行する |
| 対象ウィンドウが前面に出ない | Accessibility が許可されていない | 許可する。それでも macOS がフォーカスの切り替えをブロックする場合は、Temposhot が求めたときにウィンドウをクリックする |
| フレームが重複する | キーが、ページの描画が終わる前に届いている | 間隔を上げる。例として 2 秒から 3 秒にする |
| 最初のフレームで別のページが写る | カウントダウンが短く、ウィンドウを切り替えられない | カウントダウンを 5 秒または 10 秒に設定する |
| 40 フレームに届く前に実行が止まる | 停止条件が Duration または End time になっている | 停止条件を Screenshots に設定し、40 を指定する |
FAQ
Automator は今も macOS に含まれていますか?
はい。現在の macOS では、Automator は Shortcuts アプリと並んで Applications フォルダにあります。
Automator で単一のウィンドウを撮影できますか?
Take Screenshot アクションは、ウィンドウを名前で指定できません。screencapture -l フラグはウィンドウ ID を受け取りますが、macOS にはウィンドウ ID を出力する組み込みコマンドがありません。
Automator のスクリーンショットが互いに上書きされるのはなぜですか?
ネイティブアクションは、毎回同じファイル名で書き込むことがあります。方法 2 のシェルアクションを使うと、各フレームに番号が付きます。
Automator でスクリーンショットから PDF を作れますか?
Automator には、画像を PDF にまとめるアクションが含まれています。結果の PDF にはテキスト層がないため、検索可能な PDF ではありません。
後から Automator の PDF にテキスト層を追加できますか?
はい。別のステップで行えます。Screenshot to Searchable PDF は、ブラウザ上でスクリーンショットに文字認識を実行し、検索やコピーができる PDF を返します。
スクリーンショットにポインタを含められますか?
screencapture コマンドは、既定ではポインタを含めません。-C を追加すると含まれます。これは、フレームで誰がどこをクリックしたかを示す場合に役立ちます。ネイティブの Take Screenshot アクションは、macOS のバージョンによっては同じ設定を提供しません。
ループが 1 回で止まるのはなぜですか?
Loop アクションが、続行する前に確認するように設定されている可能性があります。自動でループする設定に切り替え、回数または分数を設定します。また、以前のアクションが失敗していないことを確認します。ログにエラーが表示されます。
Automator で指定時刻にループを開始できますか?
Automator には独自のスケジューラがありません。launchd エージェントやカレンダーベースのトリガーで、指定時刻に保存したアプリを開けますが、いずれも設定の手間が増えます。時刻に終了する実行では、Temposhot の停止条件 End time を設定するだけで済みます。
繰り返し撮影を完成した成果物に変える
キー入力、停止条件、PDF または MP4 の書き出しを伴うタイムド撮影については、自動キャプチャのガイド または Mac のスクリーンショット自動化 を参照してください。Automator を使わずに同じループを行う方法は、コマンドラインでのスクリーンショット自動化 を参照してください。
automatorscreenshot-automationmacosworkflows
このページで使用する用語: screenshot workflow
繰り返し撮影するスクリーンショットを、完成したデータに仕上げます
Temposhotは、タイマーまたはクリックごとに撮影し、結果をPDF、画像、ZIP、MP4で書き出します。
関連記事
- macOSのコマンドラインでスクリーンショットを自動化するmacOSのscreencaptureループで、全画面、固定領域、ページめくりのスクリーンショットを撮影する方法を、安全なファイル名とトラブルシューティングとともに説明します。
- Shortcuts アプリでmacOSのスクリーンショットを自動化するMac の Shortcuts で一定間隔のスクリーンショットを撮影し、設定した時刻やアプリの起動時にショートカットを実行する方法と、スクリプトや画面収録の権限の修正方法を説明します。
- 標準ツールで Mac のスクリーンショットを自動化する方法screencapture、Automator、Shortcuts を使って Mac のスクリーンショットを自動化する方法を説明します。権限の設定、安全なループの組み方、トラブルシューティングを扱います。
- Mac でスクリーンショットを撮る方法: 標準機能と専用アプリの比較サードパーティ製のスクリーンショットアプリが Mac の標準機能より適している場合と、Cmd+Shift のショートカットで足りる場合を説明します。CleanShot X、Snagit、Temposhot を比較します。