사진파일 날짜 일괄 수정 스크립트 (EXIF 정보)

작성: 2024-05-19 22:54:09
수정: 2024-05-19 22:59:55
오구사십오

발단

어제 오랜만에 가족끼리 셀프사진관에 방문하여 사진을 촬영했는데, 카메라에 날짜 설정이 잘 되어있지 않았는지 촬영한 사진 280장 모두 실제 촬영일시와 대략 22시간 20분 정도 차이가 나 있었다.

문제

육아기 아빠는 시간이 없다. 아이들이 자는 시간을 이용하여 빠르게 사진의 시간정보를 수정하여 NAS에 올려야 했고, 나는 Chat GPT에 이 문제를 해결할 수 있는 방법을 물어봤다.

프롬프트 내용은 다음과 같다.

아래 요구사항을 만족하는 powershell 스크립트를 하나 만들어줘

  1. C:\Users\USER_NAME\Downloads\9999\9999\2024_05_17 폴더에 .JPG 파일이 280개 있어
  2. 2. 위 폴더의 모든 파일의 EXIF 정보 중 찍은 날짜 정보값에서 22시간 20분을 더해서 저장

해결

Chat GPT의 해법은 꽤나 정확했다. 아래와 같은 응답을 주었고, 아무런 에러 없이 작성된 스크립트로 280장의 사진의 날짜정보를 수정할 수 있었다.

Chat GPT 응답

PowerShell을 사용하여 지정된 폴더의 모든 .JPG 파일의 EXIF 정보를 수정하는 스크립트를 작성할 수 있습니다. 이 스크립트는 ExifTool이라는 도구를 사용하여 EXIF 메타데이터를 읽고 수정합니다. ExifTool을 먼저 설치해야 합니다.

ExifTool 설치

  1. ExifTool 다운로드 페이지에서 Windows용 ExifTool을 다운로드하고 설치합니다.
  2. ExifTool이 설치된 디렉터리를 시스템의 PATH 환경 변수에 추가합니다.

PowerShell 스크립트 작성

다음은 요구 사항을 충족하는 PowerShell 스크립트입니다.

# ExifTool 경로를 지정합니다. 설치한 경로에 맞게 수정하세요.
$exifToolPath = "C:\Path\To\ExifTool\exiftool.exe"

# 작업할 폴더 경로를 지정합니다.
$folderPath = "C:\Users\USER_NAME\Downloads\9999\9999\2024_05_17"

# 폴더 내의 모든 .JPG 파일을 가져옵니다.
$jpgFiles = Get-ChildItem -Path $folderPath -Filter *.JPG

# 22시간 20분을 더할 시간 간격을 설정합니다.
$timeToAdd = New-TimeSpan -Hours 22 -Minutes 20

foreach ($file in $jpgFiles) {
    # EXIF에서 찍은 날짜 정보를 읽습니다.
    $dateTimeOriginal = & $exifToolPath -DateTimeOriginal -T $file.FullName

    if ($dateTimeOriginal) {
        # 찍은 날짜 정보를 [DateTime] 객체로 변환합니다.
        $dateTimeOriginal = [DateTime]::ParseExact($dateTimeOriginal, "yyyy:MM:dd HH:mm:ss", $null)
        
        # 22시간 20분을 더합니다.
        $newDateTime = $dateTimeOriginal.Add($timeToAdd)
        
        # 새로운 날짜 시간 문자열을 생성합니다.
        $newDateTimeString = $newDateTime.ToString("yyyy:MM:dd HH:mm:ss")
        
        # EXIF 정보를 업데이트합니다.
        & $exifToolPath -DateTimeOriginal="$newDateTimeString" $file.FullName
    } else {
        Write-Host "파일 '$($file.FullName)'에서 찍은 날짜 정보를 읽을 수 없습니다."
    }
}

스크립트 실행 방법

  1. 위 스크립트를 UpdateExifDates.ps1로 저장합니다.
  2. PowerShell을 관리자 권한으로 실행합니다.
  3. UpdateExifDates.ps1 파일이 있는 디렉터리로 이동합니다.
  4. 다음 명령어를 입력하여 스크립트를 실행합니다.
    PS> .\UpdateExifDates.ps1

이 스크립트는 지정된 폴더의 모든 .JPG 파일을 대상으로 EXIF 데이터의 DateTimeOriginal 필드에 22시간 20분을 더한 후 업데이트합니다. ExifTool이 올바르게 설치되고 시스템의 PATH에 추가되어 있어야 합니다.

 

유익했다면 후원해 주세요