구글 테이크아웃 사진 날짜가 전부 다운로드 날짜로 바뀌는 이유
구글 테이크아웃으로 받은 사진의 촬영일이 모두 같은 날짜로 표시되는 이유, 진짜 촬영 날짜가 어디에 숨어 있는지, 그리고 되돌리는 방법을 설명합니다.
구글 포토 라이브러리를 테이크아웃으로 내려받아 압축을 풀고 폴더를 열어 보니, 10년치 사진이 전부 지난주 화요일에 찍은 것으로 나옵니다. 날짜순으로 정렬하면 2012년 제주도 여행 사진이 어제 찍은 스크린샷 옆에 붙어 있습니다.
잃어버린 것은 없습니다. 날짜는 그대로 있고, 다만 컴퓨터가 보는 자리에 없을 뿐입니다.
촬영 날짜는 어디로 갔나
사진 한 장은 날짜를 세 군데에 가지고 있을 수 있습니다. 카메라는 파일 안쪽의 EXIF 블록에 "DateTimeOriginal"이라는 이름으로 촬영 날짜를 기록합니다. 운영체제는 파일 바깥에 두 개를 더 둡니다. 만든 날짜와 수정한 날짜입니다. 윈도우 탐색기, 맥 파인더, 대부분의 갤러리 앱은 EXIF를 먼저 읽고, EXIF가 없을 때만 파일 날짜를 씁니다.
테이크아웃은 이 구조를 두 가지 방식으로 망가뜨립니다. 첫째, 구글이 파일을 zip으로 묶을 때 파일 날짜는 zip을 만든 시각이나 압축을 푼 시각으로 바뀝니다. EXIF가 온전하다면 이것만으로는 문제가 되지 않습니다.
둘째, 상당수 사진에는 EXIF 날짜가 없거나 틀려 있습니다. 스크린샷은 애초에 촬영일이 없습니다. 카카오톡 같은 메신저는 사진을 압축하면서 메타데이터를 지웁니다. 스캔한 사진에는 인화한 날이 아니라 스캔한 날이 들어 있습니다. 그리고 구글 포토 안에서 날짜를 고쳐 본 적이 있다면, 그 수정은 파일이 아니라 구글의 데이터베이스에만 저장되었습니다. 구글은 이 정보를 사진 안에 다시 써 주는 대신, 사진 옆에 별도의 .json 파일로 내보냅니다.
컴퓨터는 이 .json 파일을 전혀 읽지 않습니다. 그래서 찾을 수 있는 유일한 날짜인 다운로드 날짜를 보여 주는 것입니다.
얼마나 심한지 먼저 확인하기
고치기 전에 실제로 몇 장이나 고쳐야 하는지 알아 두면 좋습니다. 휴대폰 카메라로 바로 찍은 사진은 대개 EXIF 날짜가 살아 있습니다. 대부분이 그렇다면 일부만 고치면 됩니다.
exiftool이 설치되어 있다면 다음 명령이 EXIF 날짜가 없는 파일을 전부 나열합니다.
exiftool -r -if 'not $DateTimeOriginal' -filename "Takeout/Google Photos"
실제 991장짜리 테이크아웃 조각 하나를 측정해 보니, 다섯 장 중 한 장 정도는 사이드카 파일이 올바른 날짜의 유일한 출처였습니다. 라이브러리마다 비율은 다릅니다. 스크린샷, 카톡 사진, 옛날 스캔이 많을수록 사이드카에 훨씬 더 의존하게 됩니다.
사이드카 파일을 열어 보기
사진마다 IMG_2034.JPG.supplemental-metadata.json 같은 짝 파일이 있습니다(예전 내보내기는 IMG_2034.JPG.json). 메모장이든 어떤 텍스트 편집기든 열어 보십시오. 중요한 부분은 이렇게 생겼습니다.
"photoTakenTime": {
"timestamp": "1563102330",
"formatted": "Jul 14, 2019, 11:05:30 AM UTC"
}
이 timestamp가 진짜 촬영 날짜입니다. 1970년 1월 1일부터 센 초 단위이고, UTC 기준입니다. creationTime도 있는데 이것은 구글에 업로드한 시각입니다. 촬영일을 원한다면 photoTakenTime을 써야 합니다. 파일 전체 구조는 구글 테이크아웃의 JSON 파일이 무엇인지에서 다룹니다.
직접 고치는 방법
사진이 몇 장뿐이라면 손으로 고치면 됩니다. 윈도우에서는 파일을 마우스 오른쪽 버튼으로 누르고 속성, 자세히 탭에서 "찍은 날짜"를 수정합니다. 맥에서는 사진 앱이나 미리보기에서 날짜를 조정합니다. 50장쯤 하다 보면 다른 방법이 필요해집니다.
라이브러리 전체라면 보통 exiftool을 씁니다. 다음 명령 하나가 각 사이드카의 timestamp를 사진 EXIF와 파일 날짜에 복사합니다.
exiftool -r -d %s -tagsfromfile "%d/%F.supplemental-metadata.json" \
"-DateTimeOriginal<PhotoTakenTimeTimestamp" \
"-FileCreateDate<PhotoTakenTimeTimestamp" \
"-FileModifyDate<PhotoTakenTimeTimestamp" \
-ext jpg -ext jpeg -overwrite_original "Takeout/Google Photos"
동작은 하지만 함정이 있습니다. 구글은 긴 사이드카 이름을 46자에서 잘라 버리기 때문에 위 패턴이 놓치는 파일이 생깁니다. 중복 파일의 (1)은 사진 이름과 사이드카 이름에서 위치가 다릅니다. 동영상은 다른 태그가 필요합니다. HEIC와 PNG는 따로 돌려야 합니다. 전부 exiftool 안내에서 설명합니다. 터미널이 익숙하다면 GooglePhotosTakeoutHelper 같은 무료 커뮤니티 스크립트가 이름 문제를 대신 처리해 줍니다.
앱으로 하기
명령줄에서 저녁 시간을 보내고 싶지 않다면, Takeout JSON Metadata Fixer가 같은 일을 윈도우, 맥, 리눅스용 데스크톱 앱으로 합니다.
테이크아웃 zip 파일이나 압축을 푼 폴더를 지정하면 됩니다. 앱은 모든 사진을 사이드카와 짝지어 줍니다. 2024년부터 쓰는 supplemental-metadata 이름, 잘린 이름, (1) 중복까지 포함합니다. 그다음 photoTakenTime을 사진의 EXIF에 쓰고, 파일의 만든 날짜와 수정한 날짜도 같은 값으로 맞춥니다. 사이드카가 없는 사진은 EXIF 날짜가 있으면 그것을 유지하고, 없으면 파일 날짜를 쓰기 때문에 날짜 없는 사진은 나오지 않습니다.
동영상도 날짜를 받습니다. MP4나 MOV 안에서 재생 프로그램이 읽는 자리에 기록됩니다. 사이드카에 실제 좌표가 있으면 GPS도 사진에 다시 들어갑니다. 파일 이름을 실제 날짜로 바꾸고 연도와 월 폴더로 정리할 수도 있지만, 이 부분은 선택입니다. 날짜만 고치고 싶다면 "이름 유지"와 "내 폴더 유지"를 고르면 됩니다. 인터페이스는 한국어로 나옵니다.
아무것도 쓰지 않고 무엇이 바뀔지 보여 주는 시험 실행도 있습니다. 처음 1000장은 무료이고, 19.99달러를 한 번 결제하면 제한이 없어집니다. 모든 작업은 내 컴퓨터 안에서 이루어지며 사진은 어디에도 업로드되지 않습니다.
날짜가 파일 안에 들어가고 나면, 사진이 어디로 가든 그대로 유지됩니다. 삼성 갤러리, NAS, 네이버 MYBOX, USB, 새 휴대폰 어디든 마찬가지입니다.
자주 묻는 질문
시간대는 맞게 들어가나요?
사이드카는 UTC 기준의 정확한 시각을 저장합니다. 도구는 EXIF에 쓸 때 이것을 컴퓨터의 현지 시각으로 변환하는데, EXIF에는 기본적으로 시간대 정보가 없습니다. 서울에서 오전 11시 5분에 찍은 사진은 컴퓨터가 한국 표준시로 설정되어 있으면 11시 5분으로, 뉴욕 시간이면 전날 밤 9시 5분으로 나옵니다. 고치기 전에 컴퓨터 시간대를 사진을 주로 찍은 지역으로 맞추거나, 해외 여행 사진은 몇 시간 어긋나는 것을 감수해야 합니다. 자세한 것은 사진 시간이 9시간 차이 나는 이유에 있습니다.
EXIF에 쓰면 사진이 손상되나요?
날짜 태그를 쓰는 것은 메타데이터 블록만 바꿉니다. 이미지 픽셀은 건드리지 않습니다. 결과가 마음에 들 때까지 원본 zip은 보관하십시오. 어차피 좋은 습관입니다.
왜 일부 사진만 틀리나요?
애초에 EXIF 날짜가 없던 사진만 틀리기 때문입니다. 카메라 사진은 대개 날짜가 있습니다. 스크린샷, 메신저 사진, 스캔, 구글 포토 안에서 날짜를 고친 사진은 사이드카에 의존합니다.
날짜를 고친 뒤 JSON 파일을 지워도 되나요?
됩니다. 날짜와 GPS가 사진 안에 들어가면 사이드카는 할 일을 다한 것입니다. 새 라이브러리에서 사진 몇 장을 확인한 뒤 지우십시오. JSON 파일 삭제에서 순서를 설명합니다.