今回は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