EXIF 정보에서 날짜별로 이미지 정렬 및 이름 바꾸기


9

내 사진 폴더에 문제가 있습니다. EXIF 정보에서 날짜별로 정렬하고 날짜에 따라 이름을 바꿉니다 (예 : 001.jpg, 002.jpg 등).

Linux에서 어떻게 할 수 있습니까? 이전에 일부 기본 대량 처리 작업 (변환 및 크기 조정 등)에 ImageMagick을 사용했는데이 작업에 사용할 수 있습니까?

답변:


21

Linux에서는 exiftool 명령을 사용할 수 있습니다 . 어떤 이유로 온라인 설명서에는 "RENAMING EXAMPLES"섹션이 포함되어 있지 않아 중요한 힌트를 얻을 수 있습니다.

JPG 파일의 경우 다음 명령 호출이 작업을 수행해야합니다.

exiftool -r '-FileName<CreateDate' -d '%Y-%m-%d/%H_%M_%S%%-c.%%le' <yourFolder>

설명:

  • -r 재귀
  • '-FileName<CreateDate'exiftool에게 EXIF ​​태그에 따라 파일 이름을 바꾸도록 지시합니다 CreateDate(다른 방법으로 시도 할 수 있음 ModifyDate)
  • -d '%Y-%m-%d/%H_%M_%S%%-c.%%le'날짜 소스 " CreateDate" 에서 파일 이름 문자열을 작성하는 방법을 알려줍니다 . " %-c"는 파일 충돌시 카운터를 추가하고 " %le"는 "소문자가 낮은 파일 확장자"를 나타냅니다.
    • 참고 : -FileName<...파일 이름을 바꾸고 한 단계 내에서 다른 폴더로 이동하려면 여기에 " "를 사용 했습니다. 이 설명서 -Directory<...에서는 폴더 작업에 " "구문 을 사용해야한다고 지적 합니다. 그래도 이런 식으로 저에게 효과적이었습니다.

이 강력한 도구의 설명서를 읽는 데 시간이 조금 걸립니다. 아마도 더 짧은 방법이있을 수 있습니다 : D


1
문서의 이름을 바꾸는 예 : sno.phy.queensu.ca/~phil/exiftool/... .
rwoo


2

가장 간단한 방법은 파일을 jbrout으로 가져 오는 것입니다 ... (선택 사항) 모든 파일의 이름이 시간 중심으로 변경 될 수 있습니다. 또는 이름을 전혀 변경할 필요가 없다는 것을 알 수 있습니다 (그리고 jbrout으로 충분합니다).


1

나는 작고 최적화되지 않은 Python 스크립트를 수행하여 의도 한대로 수행한다고 생각합니다.

1 import pyexiv2, sys, os, time, datetime, random
2 dirname = sys.argv[1]
3 flist=os.listdir(dirname)
4 dic = dict()
5 for fname in flist:
6     metadata = pyexiv2.ImageMetadata(sys.argv[1]+'/'+fname)
7     metadata.read()
8     tag = metadata['Exif.Image.DateTime']
9     timestamp = int(time.mktime(tag.value.timetuple()))
10     #print fname, ' ', tag.value, ' ', timestamp
11     try:
12         dic[timestamp] = fname
13     except:
14         print fname, ' not processed.'
15 
16 keys = dic.keys()
17 keys.sort()
18 i = 0 
19 for k in keys:
20     os.rename(sys.argv[1]+'/'+dic[k], sys.argv[1]+'/'+str(i)+'.jpg')
21     i+=1

이 라이브러리를 설치해야합니다 tilloy.net/dev/pyexiv2
celebdor

1

데비안 레니에서 작동하게하려면 다음을 시도하십시오.

import pyexiv2, sys, os, time, datetime, random
dirname = sys.argv[1]
flist=os.listdir(dirname)
dic = dict()
for fname in flist:
    image = pyexiv2.Image(sys.argv[1]+'/'+fname) 
    #metadata = pyexiv2.ImageMetadata(sys.argv[1]+'/'+fname)
    #metadata.read()
    image.readMetadata() 
    tag = image['Exif.Image.DateTime']
    timestamp = int(time.mktime(tag.timetuple()))
    #print fname, ' ', tag.value, ' ', timestamp
    try:
    dic[timestamp] = fname
    except:
    print fname, ' not processed.'

keys = dic.keys()
keys.sort()
i = 0 
for k in keys:
    os.rename(sys.argv[1]+'/'+dic[k], sys.argv[1]+'/'+str(i)+'.jpg')
    i+=1

1

PHP에서는 다음과 같이했습니다.

<?php

$path = "./path/to/images";
$files = scandir($path);

foreach ( $files as $file )
{
    if ( $file[0] === "." )
    {
        continue;
    }
    $ext = end(explode(".", $file));

    $suffix = "image";

    $exif = exif_read_data($path."/".$file, 'EXIF');
    $datetime = str_replace("/","-", $exif['DateTimeDigitized']);

    rename($path."/".$file, $path."/".$datetime.$suffix.".".$ext);
}

0

우리가 여기에있는 동안 여기에 더 많은 "곤조 프로그래밍"스타일이 있습니다.를 bash사용 exiftool하면 여러 디렉토리 및 / 또는 개별 파일을 한 번에 풀 수 있습니다. 인식 할 수없는 MIME 형식이있는 파일은 건너 뜁니다.

그것은 사용하여 사진의 이름을 변경 DateTimeOriginal결과가되지 않도록 (EXIF 태그를 001.jpg하지만를 2015-12-22_14:43:15.jpg.

명명 충돌이있는 경우 색인 번호가 적용됩니다 2015-12-22_14:50:57.1.jpg..

유용 할 수 있습니다 : relabel_photo_with_datetimeoriginal.sh

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.