그냥 사는 이야기

exiftool 을 사용하여 이미지 혹은 동영상 메타정보 수정하기 본문

Development/기타

exiftool 을 사용하여 이미지 혹은 동영상 메타정보 수정하기

없다캐라 2021. 3. 18. 17:45
반응형

폰으로 사진을 찍으면 GPS 위치 정보를 기록할 수 있지만 가끔씩 그것을 놓칠때가 있습니다. GPS 수신이 힘든 지하나 장소인 경우도 있지만 정상적인 곳에서 기록이 남아있지 않을 때가 있습니다. 체감상 아이폰이 비교적 괜찮은 편이었고 삼성 갤럭시도 2~3년 전부터는 좋아진거 같습니다. (나에겐 갤럭시S5에서 GPS를 놓친 사진이 꽤 있습니다)

LG는 V30 모델을 사용중인데 가끔씩 누락됩니다. 넥서스는 5, 5X를 사용해봤는데 괜찮았던 것 같습니다.(넥서스는 기억이 살짝 가물가물하네요) 현재는 구하기 힘든 팬텍 모델로 찍은 사진에서도 종종 놓치는 편이었습니다. 현재는 V50을 사용중인데 이건 아직 충분히 체감하지 못했습니다.

이건 뭐 그냥 개인의 체감일 뿐이지만 해마다 3000~4000 장 정도의 사진을 관리하고 또 메타정보를 활용할 때는 아쉬운 부분이기도 한데 결국 GPS tagging이 되지 않은 사진은 별도 작업처리를 해줘야 했습니다. 전 메타정보가 필요했거든요.

GPS 정보를 이미지에 집어넣기 위해 Python이랑 Go둘 가지고 각각 관련 라이브러리를 구해서 작성하려는데 둘 다 만족스럽지 못했습니다. exif에서도 카메라, 제조사, 시기, 버전 등등 의 조건으로 타입이 다양했고 GPS info version도 조금씩 차이가 있는데 이를 다 수용해서 편하게 사용하려면 이 분야를 꽤 많이 알아야 될 것 같았다. 그렇게 까지는 하고싶지 않아서 그냥 다른 대안을 찾다가 ExifTool 11.63을 사용해보았습니다.

그리고 카톡으로 원본이 아닌 사진을 받은 경우도 꽤 있는데 여기에 촬영시각 같은 정보도 넣어줄 수 있습니다.

ExifTool

help를 살펴보는데 내용이 너무 많아서 눈에 들어오지 않네요. 그래서 사용했던 것 몇개만 기록에 남겨봅니다.

기본적으로 exif 정보를 보기 위해서는 -l 옵션과 파일명을 지정하면 됩니다.

exiftool -l "2015-12-07 20.42.30.jpg"
ExifTool Version Number
      11.63
File Name
      2015-12-07 20.42.30.jpg
Directory
      .
File Size
      4.8 MB
...
Make
      SAMSUNG
Camera Model Name
      SM-G906K
...

꽤나 많은 정보들이 담겨 있으며 GPS 관련 정보도 찾아 볼 수 있다. 이미지 파일이 아닌 동영상 파일에도 gps 위치정보를 담을 수 있습니다. 여기서 gps 관련 정보만 살펴 볼 수 있습니다.

GPS

나에게 필요한 것은 latitude(위도), longitude(경도) 값이었습니다. latitude, longitude 순으로 하는 것은 구글맵에서도 저 위치값 순서대로 나오기 때문입니다. 그리고 같이 알아야 할 것으로 기준선을 나타내는 ~ref 붙은 값들 입니다. 우리나라에서는 North, East 순으로 하면 됩니다.

exiftool -filename -gpslatituderef -gpslatitude -gpslongituderef -gpslongitude -T -n ./ > out.txt
  • -T : Output in tabular format
  • -n : No print conversion

여기서 구한 값을 토대로 gps 정보값을 입력하기 위해서는 아래처럼 해주면 됩니다. 정확한 값을 가져오기 힘든 경우라면 구급맵 같은 곳에서 확대해서 찍은 다음 직접 구해와도 됩니다. 가령 남산공원의 위치를 넣고 싶으면 아래그 림처럼 구급맵에서 위치를 찍고 거기서 나오는 gps 값을 구해오면 됩니다.

위치를 찍으면 37.550987, 126.990905가 나옵니다.

exiftool -GPSLatitudeRef=N -GPSLatitude=37.550987 -GPSLongitudeRef=E -GPSLongitude=126.990905 "2015-12-07 20.42.30.jpg"

이렇게 한개의 2015-12-07 20.42.30.jpg 파일에만 적용하였지만 와일드문자를 사용하면 여러 파일을 한번에 수정할 수 있습니다.

촬영시각

기본적으로 dateTimeOriginal 옵션값으로 date, time 순으로 문자열을 입력하면 됩니다.

exiftool -xmp:dateTimeOriginal="2015:11:05 18:38:54" *.jpg

이런 방식은 입력한 값으로 바로 정해지지만 어떤 기준에 + 몇시간 이런식으로 상대적인 시간을 넣는 것도 가능합니다.

그리고 나같은 경우는 파일명을 촬영시간으로 관리하는 편입니다. 하지만 메타정보가 날아간 경우는 짐작한 시간으로 파일명을 만들었다. 이렇게 파일명에 시간정보가 있다면 이것을 바로 촬영시각 정보로 입력해 넣을 수 있습니다.

exiftool "-alldates<filename" 2015-08-13*

이렇게 하면 2015-08-13일로 시작하는 파일들은 자신의 파일명에 date, time 값으로 촬영시각에 바로 넣어버립니다.

ExifTool은 워낙 기능이 많고 지원하는 것 또한 부족함 없다. 개발자가 지속적으로 관리하고 수정사항을 누적시키고 있기 때문에 독보적인 위치에 있지 않을까 싶네요. 감사히 잘 쓰겠습니다.

파일명 변경

이미지 파일

파일명을 촬영시각순으로 원하는 포맷대로 변경하려면

exiftool  "-FileName<$EXIF:DateTimeOriginal" -d "%Y-%m-%d %H.%M.%S%%-c.%%le" .

하지만 이렇게 DateTimeOriginal 기준으로 하면 TimeZone 문제가 있습니다. 저장된 시간이 한국시간대면 상관없지만 그것이 아닌 경우 이걸로 파일명을 하기엔 문제가 있습니다. TimeZone과 촬영시간 등을 확인하기 위해서는 아래처럼 확인해 볼 수 있습니다.

exiftool -time:all -g1 -a -s "2022-08-19 05.27.18.jpg"
---- System ----
FileModifyDate                  : 2022:10:10 17:18:15+09:00
FileAccessDate                  : 2022:10:10 17:18:15+09:00
FileCreateDate                  : 2022:10:10 16:42:15+09:00
---- IFD0 ----
ModifyDate                      : 2017:12:22 05:27:18
---- ExifIFD ----
DateTimeOriginal                : 2022:08:19 05:27:18
CreateDate                      : 2022:08:19 05:27:18
OffsetTime                      : +09:00
OffsetTimeOriginal              : +09:00
OffsetTimeDigitized             : +09:00
SubSecTime                      : 23
SubSecTimeOriginal              : 23
SubSecTimeDigitized             : 23
---- XMP-exif ----
DateTimeOriginal                : 2022:08:19 11:27:18
---- XMP-xmp ----
CreateDate                      : 2022:08:19 05:27:18.230
---- Composite ----
SubSecCreateDate                : 2022:08:19 05:27:18.23+09:00
SubSecDateTimeOriginal          : 2022:08:19 05:27:18.23+09:00
SubSecModifyDate                : 2017:12:22 05:27:18.23+09:00

동영상 파일

동영상 파일은 EXIF가 아니기 때문에 아래처럼 생성시간 기준으로 해주면 될 것 같습니다.

exiftool --ext jpg -overwrite_original "-FileName<FileModifyDate" -d "%Y-%m-%d %H.%M.%S%%-c.%%le" .

–ext는 exclusive, -inc는 inclusive 속성을 의미합니다. 그래서 동영상 파일에게만 적용하고 jpg 확장자 파일은 제외하고 싶은 경우 위처럼 해주면 됩니다.

Comments