EXIF 데이터를 기반으로 사진 이름을 바꾸는 방법은 무엇입니까?

EXIF 데이터를 기반으로 사진 이름을 바꾸는 방법은 무엇입니까?

올바른 EXIF ​​정보가 포함된 여러 장의 사진이 있고 사진 이름이 무작위로 지정되어 있다고 가정해 보겠습니다(문제가 발생했기 때문에). jhead다음과 같은 출력을 제공하는 작은 프로그램이 있습니다 .

$ jhead IMG_9563.JPG

File name    : IMG_9563.JPG
File size    : 638908 bytes
File date    : 2011:02:03 20:25:09
Camera make  : Canon
Camera model : Canon PowerShot SX210 IS
Date/Time    : 2011:02:03 20:20:24
Resolution   : 1500 x 2000
Flash used   : Yes (manual)
Focal length :  5.0mm  (35mm equivalent: 29mm)
CCD width    : 6.17mm
Exposure time: 0.0080 s  (1/125)
Aperture     : f/3.1
Focus dist.  : 0.29m
ISO equiv.   : 125
Exposure bias: -1.67
Whitebalance : Manual
Light Source : Daylight
Metering Mode: pattern
Exposure Mode: Manual

이제 폴더에 있는 모든 사진의 이름을 다음 형식으로 바꿔야 합니다.

001.JPG
002.JPG
003.JPG
...

부 번호는 이전 이미지이고 최대 번호는 최신 이미지입니다.

제가 글을 잘 못써서 도움을 요청했습니다.

나는 bash 스크립트로 충분할 것이라고 생각하지만, 더 편안하다면 Python 스크립트를 작성할 수도 있습니다.

내 생각에는 다음과 같다.

$ mv IMG_9563.JPG `jhead IMG_9563.JPG | grep date`

하지만 동시에 모든 파일에 대해 이 작업을 수행하는 방법을 모르겠습니다.

답변1

방금 발견했습니다여기jhead가 당신을 위해 모든 것을 할 수 있습니다! :)

jhead -autorot -nf%Y-%m-%d_%H-%M-%S *.jpg

답변2

for 루프(셸/셸 스크립트에서)를 사용하여 모든 파일에 액세스할 수 있습니다.

for i in *.JPG; do
  j=`jhead "$i" | grep date | sed 's/^File date[^:]\+: \(.\+\)$/\1/'`.jpg
  echo mv -i "$i" "$j"
done

이것은 아주 기본적인 개요일 뿐입니다. echo모든 것이 정상임을 확인하면 삭제하세요.

답변3

exiv2매우 간단한 구문을 허용하는 대체 작업 방법입니다.

exiv2는 Exif, IPTC, XMP 메타데이터 및 이미지 주석을 읽고 쓰는 프로그램이며, 여러 공급업체의 메이커노트 태그를 읽을 수 있습니다. 이 프로그램에는 Exif 태그, XMP 속성 및 IPTC 데이터 세트 간을 변환하는 옵션이 있습니다.

따라서 현재 폴더의 모든 jpeg 이름이 변경됩니다.

for i in *.JPG; do exiv2 -v -r '%Y%m%d.%H%M%S.:basename:' rename "$i"; done

지리 정보도 추가하려면 다음을 사용할 수 있습니다 exivtool.

exiftool '-filename<${gpslatitude;} ${gpslongitude} ${datetimeoriginal}' -d "%Y-%m-%d %H.%M.%S%%-c.%%e" *.JPG

답변4

maxschlepzig가 게시한 코드가 마음에 들지만 여전히 출력에 문제가 있습니다.

문제는 생성된 파일 이름의 공백(날짜 문자열과 시간 문자열 사이)입니다. GUI를 사용하는 사람에게는 사소한 일이지만 명령줄에서 파일을 처리하는 것이 훨씬 더 어려워집니다.

여기서 "sed" 명령은 기본적으로 이전 전체 매개변수를 지원하기 위해 4개의 개별 "sed" 작업으로 변경되었습니다. 나 자신에 맞게 아래 파일도 일반 644 권한으로 변경합니다.

for i in *.JPG ; do
  chmod 644 $i
  j=`jhead "$i" | grep ^Date/Time | sed -e 's/^Date\/Time[ ]\+: //;s/:/-/g;s/ /_/g':/-/g;s/ /_/g'`.jpg
  echo mv -i "$i" "$j"
  # mv -i "$i" "$j"
done

관련 정보