画面を1秒に1回記録すると聞くと、ストレージの問題のように思えます。けれども本当は「同じであること」の問題です。ほとんどの1秒は直前の1秒とまったく同じに見え、そうした画面ばかりの履歴は、もっと小さな履歴よりも劣ります。検索は遅くなり、スクロールは長くなり、本当に見たかった瞬間が埋もれてしまうからです。
そこでLockTimeは、何かを残す前に、まず画面が少しでも変わったかどうかを確かめます。比較に使うのは、ディスプレイを192×192のグレースケールに縮小したもの、つまり36,864個のサンプルです。許容差は2階調。圧縮によるノイズは変化とみなさず、ウインドウの再描画は変化とみなします。
しきい値ではうまくいかない理由
すぐに思いつくのは量で決めるルールです。N個を超えるサンプルが動いたらフレームを残す。そこで、何もしていないデスクトップで実際に何が動いているかを測ってみました。
- ポインタを画面の端から端まで動かす:4サンプル。
- メニューバーの時計が1分進む:7サンプル。
- 書類に単語をひとつ入力する:23サンプル。
36,864個のうちの、これだけです。時計を無視するには、Nを7より上にしなければなりません。点滅するカーソルと時計と進行状況のスピナーをまとめて無視するなら、さらに上です。そして、いま入力した文は23。ノイズを捨てるよう調整したしきい値は、仕事まで捨ててしまいます。両者は同じくらいの大きさだからです。
代わりに「ちらつき」を見る
デフォルトのルールが見るのは、どれだけ動いたかではなく、どこが動いたかです。LockTimeは、画面のどのセルが落ち着きなく動き続けるか(カーソル、スピナー、アニメーションするサムネールなど)を学習し、そこを数えるのをやめます。別々の3回のチェックで動いたセルは「動くのが常態」とみなされ、それ以降は画面の残りの部分だけがキャプチャのきっかけになります。
この学習には上限があります。1回のチェックからLockTimeが何かを学ぶのは、動いたセルが12個以下のときだけです。ページをめくる、ウインドウを切り替える、書類をスクロールする。そうすると何千ものセルが一度に動きますが、そのチェックからは何も学びません。だから本物の変化によって、画面全体がノイズだとアプリが思い込むことは決してありません。
これは、大事な意味で無損失です。あなたがしたことは何ひとつ失われません。1ページを読んで過ごした数分間は、60枚ではなく1枚のスクリーンショットで済みます。
変更できること
設定には3つのモードがあります。すべての変化は、サンプルがひとつでも動けばフレームを残します。自動で動くものを無視は、上で説明したデフォルトです。はっきりした変化のみは、画面のかなりの部分が変わるまで待つモードで、まばらな記録を好む人向けです。
あわせて、1秒から10分までの間隔と、アプリを切り替えたときにキャプチャするスイッチもあります。3秒だけ開いたウインドウでも、ちゃんと痕跡が残ります。