내 사진 폴더에 문제가 있습니다. EXIF 정보에서 날짜별로 정렬하고 날짜에 따라 이름을 바꿉니다 (예 : 001.jpg, 002.jpg 등).
Linux에서 어떻게 할 수 있습니까? 이전에 일부 기본 대량 처리 작업 (변환 및 크기 조정 등)에 ImageMagick을 사용했는데이 작업에 사용할 수 있습니까?
답변
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
답변
이 무료 제품인 AmoK Exif Sorter를 사용해보십시오 .
답변
가장 간단한 방법은 파일을 jbrout으로 가져 오는 것입니다 … (선택 사항) 모든 파일의 이름이 시간 중심으로 변경 될 수 있습니다. 또는 이름을 전혀 변경할 필요가 없다는 것을 알 수 있습니다 (그리고 jbrout으로 충분합니다).
답변
나는 작고 최적화되지 않은 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
답변
데비안 레니에서 작동하게하려면 다음을 시도하십시오.
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
답변
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);
}
답변
우리가 여기에있는 동안 여기에 더 많은 “곤조 프로그래밍”스타일이 있습니다.를 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