본문 바로가기

일::개발

NAS 사진 정리하기 - (1) 언제 찍은 사진인가?

폰을 몇 번 바꾸고, 백업 & 복구를 시도하다 보면 그 동안 찍은 사진 순서가 엉망이 되어버린다.
앱에 따라서 앨범을 정렬하는 기준도 다르고, 사진을 찍을 때 남기는 정보도 다르고, 복사 or 이동할 때 건드리는 정보도 다르기 때문.
경험해 본 문제는 대략 다음과 같다.

  • 일부 카메라 앱으로 찍은 사진에 exif 정보 남지 않음
  • 대부분의 카메라 앱은 timezone 정보를 남기지 않음
  • 앨범 앱은 대부분 사진 파일의 modification date 기준으로 정렬해서 보여둠
  • 사진 파일을 복사/ 이동할 때 사용하는 OS, 소프트웨어, 명령어에 따라 modification date 가 보존되거나, 혹은 보존되지 않음

이런 상황에서 경험한 문제들

  • 출발하기 전 공항에서 찍은 사진과 도착해서 찍은 사진의 순서가 뒤바뀜
  • (안드로이드)에서 사진 파일을 SD카드로 옮겼더니 예전 사진이 모두 최신 사진 앞에 보임
  • 폰에 있던 사진을 PC로 옮겼다가 폰으로 다시 옮겼더니 모두 오늘 찍은 사진이라고 나옴
  • NAS에 백업했더니 외국에서 찍은 사진의 날짜/ 시간이 바뀜
  • 하나의 NAS에 가족 구성원 여러명이 백업했더니 카카오톡으로 주고받은 사진까지 백업되어서 사진이 중복 저장됨.

사진을 일괄 정리해보겠다는 목표를 세웠다.

  1. 일단 이리 저리 복사하고 백업하면서 뒤틀린 시간 정보부터 정리하고
  2. 중복된 파일을 정리하기로.

사진을 정렬하는 기준은 결국 '찍은 시간' 이 되어야 한다. 문제는 이 '찍은 시간'을 기록하는 방법이 통일되어 있지 않다는 것.
찍은 시간을 파일에 기록하는 방법을 나열해보면

  1. 파일명에 기록 (YYYYMMDD_hhmmss_OOOOOOO.jpg)
  • 안드로이드 폰 기본 카메라나 앱이 주로 이렇게 저장한다.
  • 파일을 복사해도 정보가 뒤틀리지 않고 남아있는 것이 장점
  • timezone 정보가 없음. 폰의 로컬 타임 기준으로 저장되기 때문에 exif 정보와 다를 수 있다.
  1. exif에 기록
  • exif에 기록하면 명확할 것 같지만, exif에도 카메라에 따라 촬영 시간을 기록하는 필드가 다양하다. 주로 Exif.Image.DateTime(306), Exif.Image.DateTimeOriginal(0x9003), Exif.Photo.DateTimeDigitized(0x9004) 필드가 사용된다.
  • 많은 카메라(앱)이 exif 정보에 timezone 정보를 기록하지 않는다. timezone 정보를 기록할 수 있는 필드(Exif.Image.TimeZoneOffset(0x882a))가 있기는 하지만, 대부분의 카메라 앱은 이 필드를 사용하지 않거나, 사진 찍는 시점에 GPS 정보가 없어서 쓰지 못한다.
  • timezone 필드에는 쓰지 않으면서 위치 정보(Exif.GPSInfo)는 사용하는 경우도 있다.
  1. 파일의 creation date, modofication date로 저장
  • 어느 시스템에서나 가장 쉽게 access 할 수 있는 정보이지만, 시스템에 따라 처리하는 방식이 다르다. 복사했을 때 보존되는 경우도 있고, 갱신되는 경우도 있다.

이론적으로는 2번이 가장 좋은 방법이겠지만, 모든 파일이 exif를 동일하게 저장하고 있지 않기 때문에 결국 대부분의 앨범 앱은 3번을 기준으로 사진파일을 관리하게 된다.
그러다 보니 파일을 복사/이동하거나 수정하면 앨범 순서가 뒤죽박죽이 되는 '사고'가 발생하는 것이다.

하나의 폰에서 같은 앱으로만 사진을 촬영하고, 수정하거나 이동하지 않으면 문제가 없겠지만, 현실에서는 여러 가지 앱을 이용해서 촬영하기도 하고, 메신저나 이메일로 사진을 전송받기도 하기 때문에 실제로는 여러 가지 형태의 사진 파일이 섞여서 존재하게 된다.

나의 경우처럼 가족이 하나의 NAS에 백업하고, 폰 종류도 중간 중간 바뀌고, 앱으로 찍은 사진도 많고, 서로 공유한 사진도 있는 경우에는 NAS에 대혼란이 벌어지게 되는데, 각자의 폰은 알아서 관리하기로 하고, 일단 사진이 모이는 NAS의 사진들을 정리해보기로 했다.