今回はmacOSで画面そのものを保存してみましょう。要するに画面キャプチャーです。macOSは初期の段階からコマンドでの画面キャプチャー機能があります。元祖Macintoshからキーコンビネーションで画面キャプチャーできたので、もう伝統芸と言ってもいいかもしれません。今のmacOSはNeXTSTEP,OPENSTEPベースなので、そこらへんにも多分画面キャプチャーコマンドがあったのかもしれません。ここらへん、NeXT stationのGUIレベルで少し触った程度なのでわかりませんが。
 それはさておき、今回もこれまでと同様にカレントディレクトリはデスクトップのsampleディレクトリとします(cd ~/Desktop/sample)。デスクトップにsampleディレクトリがない場合は作成しておいてください。(コマンド入力ならmkdir ~/Desktop/sampleとして作成することができます)

 なお、映像として記録する部分は記録先のハードディスク・SSDに十分な空き容量がある事を確認してから実行してください。

その名はscreencapture

 macOSで画面キャプチャーをするにはscreencaptureコマンドを使います。man screencaptureとするとマニュアルが出てきます。また、screencaptureで未使用オプションを指定しても表示されます。どんな機能があるか把握しておきたい人は一読しておくとよいでしょう。なお、manで表示した内容とscreencapture -hのようにして表示される内容は違うので、そこらへんもチェックしておく方が無難でしょう。

 まず全画面キャプチャーをしてみましょう。screencaptureの後に保存するファイル名(ファイルパス)を指定するだけです。

screencapture 1.png

古いmacOSではコマンド実行後にファイルが保存されますが、最近のmacOSではセキュリティの関係でユーザーの許可がないとscreencaptureコマンドを実行してもファイルが保存されません。以下の図のような画面が表示されることがあります。

 この画面になったらターミナルでのscreencaptureコマンドを許可するように設定します。先ほどのダイアログで「システム環境設定を開く」ボタンをクリックします。もし、ダイアログを「拒否」ボタンを押して閉じてしまった場合はアップルメニューからシステム環境設定を開いてください。開いたら左側の項目にあるプライバシーとセキュリティをクリックしてください。その後、表示される項目の中から「画面収録」をクリックして選択します。これで、先ほどのダイアログで「システム環境設定を開く」ボタンをクリックした状態と同じになります。 画面収録可能なアプリケーションの中に「ターミナル」があります。その項目の右側にON/OFFのスイッチを示すボタンがあります。OFFになっている場合はクリックしてONにしてください。

設定が終わったら再度screencapture 1.pngとして見てください。画面全体がキャプチャーされていれば無事にコマンドが動作したことになります。

画面の範囲を指定してキャプチャー

 次に画面の範囲を指定してキャプチャーしてみましょう。範囲を指定するにはRのオプションを指定した後にX座標,Y座標,横幅,縦幅の4つの数値を指定します。例えば以下のようにすると画面左上座標(0,0)から横320ポイント、縦240ポイントの範囲がキャプチャーされます。ここで注意しないといけないのはキャプチャー範囲の座標値はポイントであってピクセルではありません。144dpiなどの高解像度の画面の場合、以下の例ではキャプチャーされるピクセルは横640ピクセル、縦480ピクセルになります。高解像度ではない画面の場合は、横320ピクセル、縦240ピクセルになります。

screencapture -R 0,0,320,240 2.png

 範囲指定は決まった部分をキャプチャーしたい場合に便利なだけでなく、メニューバーやドックを含めずにキャプチャーしたい場合も便利です。

n秒後にキャプチャー

 次に指定した秒数後にキャプチャーしてみましょう。この場合はTオプションの後に秒数を指定します。以下のように指定すると5秒後に全画面キャプチャーが行われ、カレントディレクトリに3.pngファイルとして保存されます。

screencapture -T 5 3.png

保存する画像形式をJPEGにする

 デフォルトで保存される画像形式はPNG形式です。PNG形式ではなくJPEGやPDFにしたい人もいるかもしれません。そんな時にはtオプションを使います。-tの後に画像形式名を指定します。以下のように指定すると画面キャプチャー後にJPEG形式で保存されます。

screencapture -t jpeg 4.jpg

 PDF形式で保存する場合は以下のようになります。

screencapture -t pdf 4.pdf

 他にもTIFF形式などでも保存できます。とりあえず、いくつか試してみて成功したファイル形式の例を以下に示します。

・TIFF形式

screencapture -t tiff 4.tiff

・PPM (Portable Pixel Map)
 PBM,PGMを指定しても保存されるのはPPM形式になります。

screencapture -t ppm 4.ppm

・PSD (Photoshop)
 なお、psdでなくpsと指定した場合でもPSD形式で保存されます。

screencapture -t psd 4.psd

・JPEG 2000

screencapture -t jpf 4.jpf

・GIF

screencapture -t gif 4.gif

・Windows BMP

screencapture -t bmp 4.bmp

・TGA (Targa)

screencapture -t tga 4.tga

 WebP形式はmacOS Venturaでは対応していないようで保存できませんでした。

特定のウィンドウをキャプチャー

 特定のウィンドウをキャプチャーすることもできます。が、キャプチャー時にWindow IDを指定する必要があります。Window IDをコマンドから取得するのはできなさそうな気がしますが、1以上の番号を指定していけば、どれかのウィンドウに行き当たります。(行き当たりバッタリ・・・)
 ウィンドウIDを指定するには-lの後に1以上の正数値を指定します。

screencapture -l 10 10.png

 シェルスクリプトで自動的にIDを変えてキャプチャーする方法もあります。ただし、音がうるさいかもしれません。その場合は消音する-xを付加しておけば静かな状態で複数のウィンドウをキャプチャーできます。
以下のシェルスクリプトをcap.shという名前で保存します。chmod 755 cap.shとして実行権限を与えた後に./cap.shと入力すれば実行されます。

#!/bin/bash
for i in {1..100} ; do
  screencapture -l ${i} "cap${i}.png"
done

 ところで上記のシェルスクリプトだとウィンドウの影も含まれてしまいます。ウィンドウの影を含めずにキャプチャーしたい場合は-oを付加します。以下のようにすると複数のウィンドウを影なしでキャプチャーします。

#!/bin/bash
for i in {1..100} ; do
  screencapture -o -l ${i} "cap${i}.png"
done

動画としてキャプチャー

 最後に動画としてキャプチャーしてみましょう。動画の場合、QuickTime形式で保存されます。映像で全画面キャプチャーする場合は-vを指定します。以下のようにすると全画面を映像で記録し1.movという名前で保存します。なお、ターミナルから実行した場合はcontrolキーを押してからCキーを押すと録画が停止します。また、映像として保存する場合、録画時間は指定できないようです。手動で停止させる必要があります。

screencapture -v 1.mov 

録画範囲を指定する場合はRオプションと組み合わせます。以下のようにすると画面左上(0,0)から横320ポイント、縦240ポイントの範囲が録画されます。

screencapture -v -R 0,0,320,240 2.mov

その他のオプション

 screencaptureには数多くのオプションがあります。ここではいくつかのオプションについて説明します。

 キャプチャーした画像を通常の手動キャプチャー時と同様に右下にサムネイルを表示します。なお、指定したファイル名は無効になります。保存先はデフォルトで設定されているディレクトリ(フォルダ)になります。

screencapture -u 11.png

 キャプチャーした内容をファイルではなくクリップボードに入れる場合は-cを指定します。-cを指定した場合は保存先のファイル名(ファイルパス)を指定する必要はありません。

screencapture -c

 手動で範囲を指定してもらいたい場合は-sを指定します。以下のようにすると手動で範囲を指定した後にファイルが保存されます。

screencapture -s 11.png

 キャプチャー後にプレビュー.appまたはQuickTimeで表示する場合は-Pを指定します。この場合、ファイルとして保存されないのでファイル名(ファイルパス)を指定する必要はありません。

screencapture -P

 マルチモニタの場合はモニタ番号を指定してキャプチャーすることができます。-Dの後にモニタ番号を指定します。メインモニタは1になります。以後モニタの数に応じて2,3,4,5のように番号を指定します。なお、存在しないモニタ番号を指定するとエラーになります。

screencapture -D 1 11.png

 特定のウィンドウだけをキャプチャーする場合は-Wを指定します。マウスを動かすとキャプチャー可能なウィンドウがハイライトされます。クリックするとキャプチャーされます。

screencapture -W 11.png

 他にもオプションがありますが、だいたい今回説明したオプションを知っていれば十分でしょう。

著者 仲村次郎
いろいろな事に手を出してみたものの結局身につかず、とりあえず目的の事ができればいいんじゃないかみたいな感じで生きております。