Pacix Labs

사진

구글 테이크아웃 JSON 파일을 사진에 합치는 방법 (잘못된 날짜 고치기)

Google Takeout은 사진 날짜를 별도의 JSON 파일에 저장합니다. 무료 도구 네 가지로 다시 합칠 수 있습니다. 도구별로 고치는 것, 정확한 명령어, 결과 확인 방법을 정리했습니다.

· 6 분 분량

다른 언어로도 볼 수 있습니다: العربيةবাংলাDeutschespañolfrançaisગુજરાતીहिन्दीIndonesiaitaliano日本語ಕನ್ನಡEnglishमराठीpolskiportuguêsрусскийKiswahiliதமிழ்తెలుగుไทยTürkçeукраїнськаاردوTiếng Việt中文

Google Takeout으로 Google 포토 라이브러리를 내려받았습니다. 그런데 수천 장의 사진 옆에 수천 개의 .json 파일이 있고, 사진 뷰어는 2019년 사진을 어제 찍었다고 표시합니다. 이 문제를 고치려면 각 JSON 파일을 해당 사진에 다시 합쳐야 합니다. 도구가 JSON 파일에서 촬영 날짜를 읽어 사진에 기록하면, 모든 앱이 다시 올바른 날짜를 보여 줍니다.

이 가이드는 JSON 파일이 왜 생기는지, 병합이 왜 가끔 실패하는지, 무료 도구 네 가지가 병합을 어떻게 하는지 설명합니다. 도구별 정확한 명령어, 각 도구가 바꾸는 날짜, 무엇이든 삭제하기 전에 결과를 확인하는 방법도 함께 알려 드립니다.

사진에 JSON 파일이 따라오는 이유

Takeout은 사진마다 파일 두 개를 줍니다. 하나는 이미지(예: IMG_1234.jpg)이고, 다른 하나는 원래 날짜, GPS 좌표, 설명, 속한 앨범 정보가 담긴 JSON 파일입니다. 한 내보내기 가이드는 처음 볼 때 흔히 겪는 상황을 이렇게 설명합니다. 2019년 사진의 날짜가 "어제"로 표시되고 위치도 앨범도 없었지만, 실제로 잃어버린 것은 없었습니다. 정보는 JSON 파일에 있었습니다(PixelUnion). 일리노이 공과대학도 내보낸 파일 수가 라이브러리의 사진 수보다 많은 이유를 같은 방식으로 설명합니다(Illinois Tech).

사진 파일과 JSON 파일의 내용이 다를 수 있습니다. google-photos-exif의 제작자는 Google 포토에서 날짜를 바꾸면 이미지 안의 메타데이터는 업데이트되지 않고 새 날짜가 JSON 파일에만 있다는 점을 발견했습니다. 일부 이미지, 특히 다른 사람이 공유해 준 이미지에는 날짜가 아예 없기도 합니다(google-photos-exif). gphotos-takeout-repair의 README는 문제의 나머지 절반을 보여 줍니다. 압축을 푼 내보내기에서는 사진, 편집본, JSON 파일 모두 생성 날짜가 Takeout 내보내기 날짜로 표시됩니다(gphotos-takeout-repair).

그래서 사진 파일만 읽는 앱에는 날짜가 없거나 내보낸 날이 보입니다. 올바른 날짜는 JSON 파일에 있고, 병합하면 그 날짜가 사진으로 돌아갑니다.

병합을 망치는 세 가지

모든 병합 도구는 사진마다 올바른 JSON 파일을 찾아야 합니다. Takeout의 세 가지 특성이 이를 어렵게 만듭니다.

  1. 사진과 그 JSON 파일이 서로 다른 zip에 있을 수 있습니다. Ente의 이전 FAQ는 flower.jpeg가 한 zip에, flower.json이 다른 zip에 있어서 둘을 짝지을 수 없는 예를 듭니다(Ente). Porte의 README도 같은 경우를 알려진 제한 사항으로 적어 둡니다. 이미지와 다른 압축 파일에 있는 메타데이터 파일은 찾지 못합니다(Porte).
  2. JSON 파일 이름이 일관되지 않습니다. IMG123.jpg에 대해 IMG123.jpg.json이 나올 수도 있고 그냥 IMG123.json이 나올 수도 있으며, 일부 폴더에는 짝이 되는 이미지가 없는 JSON 파일이 있습니다(google-photos-exif).
  3. 편집한 사진은 두 번 나옵니다. Takeout은 원본과 편집본을 해시가 서로 다른 별도 파일로 내보내므로, 해시를 비교하는 중복 검색 도구는 이를 찾아내지 못합니다(Ente). 편집본에는 -edited 접미사가 붙어, IMG_0001-edited.jpg가 IMG_0001.jpg 옆에 놓입니다(gphotos-takeout-repair).

첫 번째 문제의 해결책은 어떤 도구든 같습니다. 모든 zip을 내려받은 다음, 모두 하나의 상위 폴더에 압축 해제하고 하위 폴더는 그대로 두세요(Ente). 두 zip에 같은 이름의 폴더가 있으면, 하나로 다른 하나를 덮어쓰지 말고 폴더 내용을 합치세요(google-photos-exif).

다운로드에 관한 일리노이 공과대학의 팁이 하나 있습니다. Takeout 창을 앞에 띄워 두세요. 창을 최소화하거나 다른 창에서 작업하면 Google이 다시 로그인하라고 요청하기 때문에 15분 뒤 다운로드가 실패합니다(Illinois Tech).

구글 테이크아웃 JSON 무료 도구 네 가지와 각 도구가 고치는 날짜

사진에는 두 종류의 날짜가 있습니다. EXIF 날짜(DateTimeOriginal)는 이미지 안에 저장되어 어떤 앱이나 서비스로 옮기든 함께 이동합니다. 파일 날짜(수정 날짜 또는 생성 날짜)는 파일 시스템에 속합니다. 이 날짜는 쉽게 사라집니다. gpth의 README는 Android 휴대폰에서 파일을 이동하면 대개 이 날짜가 초기화된다고 경고합니다(gpth). 도구를 고르기 전에 둘 중 어느 쪽을 기록하는지 확인하세요.

아래 모든 명령어에서 첫 번째 폴더는 압축을 푼 Takeout이고, 두 번째 폴더는 비어 있는 새 출력 폴더입니다.

Porte: 날짜와 위치를 사진 안에 기록

Porte는 관련 JSON 파일의 타임스탬프와 위치 정보를 이미지의 EXIF 데이터로 복사하며, 이미지를 다시 압축하지 않습니다. 날짜를 찾지 못하면 파일 이름에서 시도하고, 찾은 날짜 중 가장 이른 날짜를 사용하므로 파일 수정 날짜가 촬영 날짜로 잘못 쓰이지 않습니다. 파일을 제자리에서 바꾸지 않고 출력 폴더로 복사하며, 실패한 파일은 별도 폴더에 넣고 로그를 저장합니다. 앨범 데이터는 보존하지 않습니다. 프로젝트의 릴리스 페이지에서 완성된 프로그램을 내려받을 수 있습니다(Porte).

porte srcpath destpath

google-photos-exif: 빠진 EXIF 날짜를 채움

이 Node.js 도구는 각 JSON 파일에서 photoTakenTime을 읽습니다. 파일의 수정 날짜를 설정하고, 사진에 아직 없는 경우에만 DateTimeOriginal을 채웁니다. 처리하지 못한 파일은 오류 폴더로 갑니다(google-photos-exif). PixelUnion의 필자는 이 도구를 사용해 라이브러리 전체를 약 20분 만에 처리했다고 전합니다(PixelUnion).

yarn start --inputDir ~/takeout --outputDir ~/output --errorDir ~/error

gpth: 한 폴더 또는 월별로 정리한 뒤 파일 날짜를 설정

Google Photos Takeout Helper는 대화형입니다. 실행한 뒤 질문에 답하면 됩니다. 모든 사진을 한 폴더에 모으거나, --divide-to-dates 옵션으로 월별 폴더에 나누고, 파일의 최종 수정 날짜를 설정합니다. JSON 데이터를 EXIF에 다시 기록하는 기능은 아직 할 일 목록에 있어서, README에는 EXIF 날짜가 없는 사진에 대해 파일 날짜를 EXIF 날짜로 복사하는 exiftool 명령어가 추가로 나와 있습니다. 파일을 다시 건드리기 전에 이 명령어를 실행하세요. gpth는 기본적으로 파일을 이동하므로 원본 zip을 보관해 두세요(gpth).

exiftool -overwrite_original -r -if 'not defined DateTimeOriginal' -P "-AllDates<FileModifyDate" "your/output/folder/ALL_PHOTOS/"

gphotos-takeout-repair: JSON 파일과 편집본 중복을 제거

이 도구는 사진을 새 폴더로 복사하면서 폴더 구조를 유지하고, JSON 파일의 photoTakenTime으로 각 파일의 생성 날짜를 설정합니다. -edited 복사본이 있으면 그 버전(보통 가장 좋은 버전)을 남기고 원본은 빼므로, 결과물에는 JSON 파일도 편집본 중복도 없습니다(gphotos-takeout-repair). npm install -g gphotos-takeout-repair로 설치한 다음 실행합니다.

gphotos-takeout-repair --src ./unzipped-takeout-dir --dest ./output-dir

모든 사진의 날짜를 이미지 안에 넣고 싶다면 Porte가 직접 기록합니다. 나머지 세 도구를 쓴다면 아래 방법으로 나중에 EXIF 날짜를 확인하세요.

날짜가 실제로 사진 안에 들어갔는지 확인하기

파일 탐색기의 "수정한 날짜" 열을 믿지 마세요. 메타데이터 자체를 확인하세요.

  1. 추가 소프트웨어 없이: 사진을 마우스 오른쪽 버튼으로 클릭하고 Mac에서는 "정보 가져오기", Windows에서는 "속성"을 선택합니다. 병합이 잘 되었다면 올바른 촬영 날짜, 사진에 원래 있었다면 GPS 좌표, 기록이 있다면 카메라 모델이 보여야 합니다(PixelUnion).
  2. 폴더 전체를 확인하려면: ExifTool은 폴더 안 모든 JPG의 DateTimeOriginal 태그를 출력할 수 있습니다. 아래 줄은 ExifTool 문서의 예시를 바탕으로 했습니다(ExifTool).
exiftool -DateTimeOriginal -S -s -ext jpg .

빈 줄이나 내보낸 주의 날짜가 나오면 그 사진은 병합되지 않은 것입니다. 이럴 때는 도구의 오류 폴더나 실패 폴더를 보고, 짝이 되는 JSON 파일이 다른 zip에서 왔는지 확인하세요.

  1. 개수를 비교하세요. 출력 폴더와 오류 폴더를 합친 사진과 동영상 수는 압축을 푼 Takeout과 거의 같아야 합니다. 도구가 편집본 중복을 제거한다면 그만큼 빼고 비교하세요.

클릭 한 번으로 끝내는 대안

명령줄을 쓰고 싶지 않다면 데스크톱 앱으로도 같은 작업을 할 수 있습니다. PHOTOK는 Pacix Labs의 제품입니다. 제품 페이지에 따르면, Google이 여기저기 흩어 놓은 .json 파일을 읽어 실제 날짜와 장소를 되돌려 놓고, 사진을 연 / 월 / 장소 폴더로 정리하며, 완전히 같은 중복 사진은 따로 분리합니다. Windows 10·11과 Apple 칩을 탑재한 Mac에서 실행되고, 아무것도 업로드하지 않으며, 파일을 절대 삭제하지 않습니다. 미리 보기는 무료이고, 정식 버전은 €49 일회성 결제입니다(PHOTOK).

위의 무료 도구든 앱이든 어떤 방법을 고르든 규칙은 같습니다. 복사본에서 작업하고, 일부를 확인하고, zip을 보관하세요.

체크리스트

  • 모든 zip을 내려받고 두 번째 드라이브에 복사본을 보관합니다.
  • 모든 zip을 하나의 상위 폴더에 압축 해제하고, 하위 폴더를 유지하며, 같은 이름의 폴더는 합칩니다.
  • 도구를 고르고 어떤 날짜를 기록하는지 파악합니다: EXIF 날짜, 파일 날짜 또는 둘 다.
  • 복사본에서 실행하고 새 출력 폴더로 내보냅니다.
  • 여러 연도의 사진을 골라 DateTimeOriginal을 확인하고 오류 폴더도 살펴봅니다.
  • -edited 복사본을 어떻게 할지 정합니다.
  • JSON 파일과 zip은 확인과 두 번째 백업을 마친 뒤에만 삭제합니다.

자주 묻는 질문

Google Takeout은 왜 사진과 함께 JSON 파일을 주나요?

Google은 사진마다 알고 있는 촬영 날짜, 위치, 설명, 앨범 정보를 사진 옆의 별도 .json 파일에 저장합니다. 사진 파일 자체에는 같은 정보가 없을 수 있습니다. 예를 들어 Google 포토에서 날짜를 바꾼 경우가 그렇습니다.

JSON 파일을 삭제해도 되나요?

날짜와 장소가 사진 안에 들어가고 일부 사진을 확인한 뒤에만 삭제하세요. 그 전까지는 Google이 알고 있는 사진의 날짜와 위치가 저장된 곳이 JSON 파일뿐입니다.

병합 도구는 어떤 날짜를 고치나요?

도구마다 다릅니다. 일부는 날짜를 사진의 EXIF 메타데이터(DateTimeOriginal)에 기록하며, 이 정보는 파일과 함께 이동합니다. 다른 도구는 파일의 수정 날짜나 생성 날짜만 설정하는데, 이 날짜는 일부 복사 방식에서 초기화됩니다. 고르기 전에 도구의 README를 읽어 보세요.

병합 후에도 일부 사진이 여전히 틀린 이유는 무엇인가요?

대개 사진과 그 JSON 파일이 서로 다른 zip에 들어 있어 한 번도 합쳐지지 않았거나, JSON 파일 이름이 사진 이름과 다르기 때문입니다. 모든 zip을 한 폴더에 압축 해제하고, 새 복사본에서 도구를 다시 실행한 뒤 도구의 오류 폴더나 실패 폴더를 확인하세요.

원본 zip 파일을 보관해야 하나요?

네, 병합한 라이브러리를 확인하고 다른 백업을 하나 더 만들 때까지 보관하세요. 일부 도구는 파일을 복사하지 않고 이동하므로, zip은 처음부터 다시 시작할 수 있는 유일한 방법입니다.

출처