Takeout JSON

구글 테이크아웃 사진에 원래 촬영일을 다시 넣는 방법

진짜 촬영 날짜는 사진 옆의 .json 파일에 있습니다. 명령줄 없이 그 날짜를 사진 안에 다시 써 넣는 쉬운 방법과, 직접 할 때의 순서를 정리했습니다.

올바른 촬영일은 이미 내보내기 안에 있습니다. 각 사진 옆에 있는 .json 파일의 photoTakenTime이라는 항목입니다. 문제는 어떤 사진 뷰어도 그 파일을 읽지 않는다는 것입니다. 뷰어는 이미지 안에 저장된 정보 블록인 EXIF를 읽는데, 구글은 그 부분을 비워 둔 채 내보냈습니다.

그래서 해결 방법은 복사 작업입니다. 각 .json에서 날짜를 읽어 짝이 되는 사진에 쓰고, 파일 자체의 타임스탬프도 같은 값으로 맞춥니다. 한 장이면 1분 걸립니다. 4만 장이면 소프트웨어가 필요합니다.

먼저 무엇이 필요한지 확인하기

내보내기의 모든 zip 조각을 한 폴더에 풀어 두십시오. 사진과 그 짝인 .json이 서로 다른 zip 조각에 들어 있는 경우가 많기 때문입니다. Takeout/Google Photos 아래에 Photos from 2019 같은 연도 폴더와 앨범 폴더가 합쳐져 있어야 합니다.

그다음 사진 하나를 골라 옆의 .json을 메모장으로 열어 보십시오. photoTakenTime 아래의 timestamp가 1970년부터 센 초 단위의 촬영 시각이고, formatted가 사람이 읽는 형태입니다. 이 값이 구글 포토에서 보던 날짜와 같은지 확인하면 됩니다. 이 파일의 다른 항목은 테이크아웃의 JSON 파일이 무엇인지에 정리했습니다.

왜 어떤 사진은 맞고 어떤 사진은 틀리나

카메라 앱으로 직접 찍은 사진은 대부분 EXIF에 촬영일이 들어 있고, 테이크아웃도 그 부분은 건드리지 않습니다. 이런 사진은 압축을 풀어도 날짜가 맞게 나옵니다. 문제는 처음부터 EXIF 날짜가 없던 사진입니다. 스크린샷, 카카오톡이나 다른 메신저로 받은 사진, 스캔한 옛날 사진, 인터넷에서 저장한 이미지, 그리고 구글 포토 안에서 날짜를 손으로 고친 사진입니다. 구글 포토는 이런 사진의 날짜를 자기 데이터베이스에만 두었고, 내보낼 때 그 값을 사이드카에 적어 준 것입니다.

그래서 라이브러리를 열어 보면 절반은 맞고 절반은 다운로드 날짜인 상태가 흔합니다. 틀린 사진만 골라 고칠 필요는 없습니다. 아래 방법은 모두 사이드카가 있는 사진에는 사이드카 값을 쓰고, 없는 사진은 원래 EXIF를 유지합니다.

방법 1: 몇 장이면 손으로

윈도우에서는 사진을 마우스 오른쪽 버튼으로 누르고 속성, 자세히 탭을 엽니다. "찍은 날짜" 항목을 누르면 직접 입력할 수 있습니다. 맥에서는 사진 앱에 넣은 뒤 날짜와 시간 조정을 씁니다. 스캔 사진 몇 장이나 여행 사진 한 묶음이라면 이걸로 충분합니다. 수백 장이 넘어가면 다음 방법으로 가야 합니다.

방법 2: exiftool

exiftool은 무료 명령줄 도구이고 많은 사람이 이 용도로 씁니다. 다음 명령이 사이드카의 timestamp를 사진의 EXIF와 파일 수정 날짜에 복사합니다.

exiftool -r -d %s -tagsfromfile "%d/%F.supplemental-metadata.json" \
  "-DateTimeOriginal<PhotoTakenTimeTimestamp" \
  "-FileModifyDate<PhotoTakenTimeTimestamp" \
  -ext jpg -ext jpeg -ext heic -ext png -overwrite_original "Takeout/Google Photos"

동작은 하지만 사이드카 파일 이름 때문에 까다롭습니다. 구글은 긴 이름을 중간에서 잘라 버리고, 연도에 따라 두 가지 이름 방식을 쓰며, 중복 파일의 (1) 번호를 이상한 자리에 붙입니다. 이런 파일을 놓치는 패턴은 조용히 건너뜁니다. 동영상은 EXIF가 아니라 다른 태그를 쓰기 때문에 별도 명령이 필요합니다. 전체 명령과 함정은 exiftool로 테이크아웃 날짜 고치기에서 다룹니다.

방법 3: 앱

Takeout JSON Metadata Fixer는 이 모든 것을 대신 처리합니다. 테이크아웃 폴더나 zip 파일을 고르고, 고쳐진 사진이 갈 위치를 고르고, 시작을 누르면 됩니다. 앱은 모든 사이드카를 사진과 짝짓고, 날짜와 시간과 GPS를 쓰고, 마지막에 어떤 파일에 쓸 데이터가 없었는지 알려 줍니다. 아무것도 업로드되지 않고, 처음 1000장은 무료입니다. 이후에는 19.99달러를 한 번만 결제하면 되고 구독은 없습니다.

인터페이스는 한국어입니다. 날짜만 고치고 이름과 폴더는 그대로 두고 싶다면 "이름 유지"와 "내 폴더 유지"를 고르면 됩니다. 원하면 파일 이름을 2019-07-14-1105_Seoul.jpg처럼 날짜와 장소로 바꾸고 연/월 폴더로 정리할 수도 있습니다. 실제로 쓰기 전에 무엇이 바뀔지 보여 주는 시험 실행이 있어서, 사진 몇 장을 열어 결과를 확인한 뒤 전체를 처리할 수 있습니다.

시간대에 주의하기

사이드카의 timestamp는 UTC 기준입니다. 도구는 이것을 컴퓨터의 시간대로 변환해 EXIF에 씁니다. 한국은 UTC+9이므로, 컴퓨터가 한국 표준시로 설정되어 있으면 서울에서 오전 11시 5분에 찍은 사진이 11시 5분으로 나옵니다. 시간대가 잘못 설정되어 있으면 모든 사진이 같은 시간만큼 어긋납니다. 고치기 전에 윈도우 설정에서 시간대를 확인하십시오. 자세한 내용은 사진 시간이 9시간 차이 나는 이유에 있습니다.

결과 확인하기

작업이 끝나면 연도가 다른 사진 몇 장, 스크린샷 하나, 카카오톡으로 받은 사진 하나, 동영상 하나를 골라 확인하십시오. 윈도우 탐색기에서 "찍은 날짜" 열을 추가하면 한눈에 볼 수 있습니다. 열 제목을 마우스 오른쪽 버튼으로 누르고 "기타"에서 찍은 날짜를 켜면 됩니다. 이 열이 채워져 있고 구글 포토에서 보던 날짜와 같으면 성공입니다.

날짜가 파일 안에 들어가면 그다음은 어디로 가든 상관없습니다. 삼성 갤러리, NAS, 네이버 MYBOX, 외장하드 어디에 넣어도 날짜순 정렬이 됩니다. 그 뒤에는 .json 파일을 지워도 됩니다.

자주 묻는 질문

photoTakenTime과 creationTime 중 어느 것을 써야 하나요?

photoTakenTime입니다. creationTime은 구글에 업로드한 시각이라 몇 년 뒤일 때가 많습니다.

이미 촬영일이 있는 사진도 덮어쓰나요?

카메라 사진처럼 EXIF 날짜가 살아 있는 사진은 대개 사이드카의 값과 같습니다. 구글 포토 안에서 날짜를 고친 사진은 사이드카 값이 수정된 날짜이므로, 그쪽이 맞습니다.

사진 화질이 떨어지나요?

아니요. 날짜를 쓰는 것은 메타데이터 블록만 바꿉니다. 이미지 데이터는 그대로입니다.