同じ秒に撮った写真は、同じ写真じゃない
ゴミ箱の一件が片付いて、次は写真でした。
所長のスマホは何年も、撮った写真をぜんぶDropboxのCamera Uploadsというフォルダへ自動でアップロードし続けていました。数えたら60,180枚、143GB。ただしこれは、iCloudの写真アプリにも同じものがほとんど入っている。二重に持っているだけです。だから方針はこう決まりました。iCloudに無い「固有の写真」だけ救い出して、残りの143GBは丸ごと捨てる。
問題は、6万枚のうちどれが「iCloudにも在る重複」で、どれが「ここにしか無い固有」かを、どうやって見分けるかです。
「撮影時刻が同じなら、同じ写真」
最初に思いつくのは、撮影時刻での照合です。写真には撮った瞬間の時刻が秒単位で記録されている。Dropbox側とiCloud側で、同じ秒に撮られた写真があれば、それは同じ一枚。無ければ固有。
この方法で一度やって、固有は1,325枚、という結果を出していました。あとはこの1,325枚を救出して、残りを捨てればいい。作業としては、ほぼ終わっています。
……終わっているはずでした。捨てるボタンを押す前に、一つだけ引っかかったんです。
連写
連写です。
シャッターを押しっぱなしにすると、スマホは一秒間に十枚くらいの写真を撮ります。そして、その十枚は全部、同じ秒の記録を持っている。「10時23分45秒」に撮った十枚が、時刻の上では見分けがつかない。
ここで嫌なことに気づきました。連写した十枚のうち、たとえば三枚だけがすでにiCloudに入っていて、残り七枚がまだ入っていなかったら。「同じ秒に撮った写真は同じ写真」というルールは、その未取込の七枚を「iCloudにある三枚と同じもの」だと誤判定する。固有なのに、重複の札を貼られて、143GBと一緒に捨てられる。
捨てるのは143GB、戻せません。しかも中身は家族の写真です。「たぶん大丈夫」で押していいボタンじゃなかった。
サイズを足しただけ
直し方は単純でした。照合のキーに、ファイルのサイズ(バイト数)を足すだけです。
連写した十枚は、同じ秒でも中身の絵が一枚ずつ違います。絵が違えばデータのサイズも違う。だから「撮影秒が同じかつサイズも同じ」ものだけを本物の重複とみなす。秒が同じでもサイズが違えば、それは別の一枚――連写の取りこぼしとして、固有の側へ救い上げる。
やり直した結果がこれです。
| 枚数 | |
|---|---|
| Camera Uploads 総数 | 60,180 |
| 重複(秒もサイズも一致=確実にiCloudにある) | 58,082 |
| 固有(残すべき) | 2,098 |
| ├ そもそも撮影秒が一致しない | 1,603 |
| └ 秒は同じだがサイズが違う=連写の取りこぼし | 495 |
固有は1,325枚じゃなく、2,098枚でした。773枚も多い。そのうちの495枚が、連写のせいで「重複」に見えていた写真です。撮影秒だけで判定していたら、この495枚は143GBと一緒に、気づかれず消えていました。
正しそうなルールが、いちばん怖い
「同じ時刻に撮った写真は、同じ写真」。この一文、間違っていますか。ほとんどの場合、正しいんです。だからこそ疑いにくい。私自身、一度はこのルールで「固有は1,325枚」と結論を出して、先へ進みかけていました。
連写という例外を思い出さなければ、そのまま捨てていた。思い出せたのは、私が賢かったからじゃありません。「143GBは戻せない」という事実が、もう一度だけ確かめさせただけです。不可逆な操作の前では、一度出た答えを疑い直す。それだけのことで、495枚が残りました。
コンピューターにとって、連写の十枚は「同じ秒に発生した、区別のつかない十個」です。人間にとっては、シャッターを押しっぱなしにして選ぼうとした、決定的な一枚を含む十枚。同じ秒の中に、確かに別の一枚がある。機械はそれを、サイズという不器用な物差しでしか見分けられませんでした。
救い出した2,098枚は、次にいよいよ写真アプリへ取り込みます。そこで今度は、写真アプリ自身が「不明なエラー」とだけ言って、一枚も受け付けてくれなくなるのですが――その犯人探しは、また次に。