EXIF 데이터를 기반으로 여러 사진 및 비디오의 이름을 바꾸는 방법?


11

나는 종종 디지털 카메라와 태블릿 에서 PC로 사진과 비디오 (주로 JPG 및 MOV 확장자를 가짐) 를 내 PC 로 가져 오며, EXIF ​​데이터에 이미 존재 하는 날짜와 시간 에 따라 정렬하여보고자합니다 . 따라서 필자는 각 파일 이름 앞에 날짜 및 시간 스탬프를 삽입하여 간단한 노틸러스 스크립트 를 사용하여 이름바꾸는 것이 바람직합니다.

나는 지금까지 다음과 같은 노틸러스 스크립트를 모으기 만했습니다.

for i in *.*
do
mv -i "$i" "$(exiftool -CreateDate "$i" | awk -F ': ' '{print $2}')_"$i"" 
done

이 이름 변경 방법에서 마음에 들지 않는 점 은 EXIF ​​날짜 및 타임 스탬프에 사용 된 콜론 (예 : "2013 : 09 : 03 20 : 55 : 09_IMG_0108.JPG")으로 나중에이 파일을 다른 환경으로 전송할 때 문제가 발생할 수 있습니다 ( 예) Windows).

이 명령 ( exiftool 대신 exiv2 사용 )을 사용하면 날짜 및 타임 스탬프를 편리하게 조작 할 수 있지만 비디오 (예 : MOV) 파일에서는 작동하지 않는다는 단점이 있습니다 .

exiv2 -k -r '%Y-%m-%d_%H-%M-%S_:basename:' rename "$i"

그래서 누군가 더 나은 해결책을 찾을 수 있기를 바랍니다. 그리고 원래 파일 이름과 확장자를 소문자로 변환해도 마술이 될 것입니다!


아래의 훌륭한 답변 외에도 pyRenamer을 확인하십시오 . 비디오 파일과 함께 사용한 경험이 없지만 (EXIF 데이터가 있습니까?) 사진에 적합하다고 말할 수 있습니다. 파일 확장자를 소문자로 변경할 수도 있습니다.
Tom Brossman

답변:


6

이 이름 변경 방법에서 마음에 들지 않는 점은 EXIF ​​날짜 및 타임 스탬프에 사용 된 콜론 (예 : "2013 : 09 : 03 20 : 55 : 09_IMG_0108.JPG")으로 나중에이 파일을 다른 환경으로 전송할 때 문제가 발생할 수 있습니다 ( 예) Windows).

다음과 같이 이름 지정 체계를 실행하여 sed콜론을 대시로 바꾸고 공백을 밑줄로 바꿀 수 있습니다.

mv -i "$i" "$(exiftool -CreateDate "$i" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_$i"

전체를 소문자로 만드는 경우 다음을 사용할 수 있습니다 rename.

rename 's/(.*)/\L$1/' file.JPG
##  or
rename 's/(.*)/\L$1/' *.*

또는 다음과 같이을 사용하여 스크립트 내에서 수행 할 수 있습니다 sed.

j=$(echo "$i" | sed -e 's/\(.*\)/\L\1/')

... 다음 사용 $j최종 대신에 변수를 $i당신의 mv라인. 다른 sed 배포판은 다른 이름 바꾸기 명령을 가지고 있지만 sed는 보편적 이므로이 sed 방식은 약간 더 이식성이 있습니다 (중요한 경우).

또는 대신 스크립트를 다음과 같이 수정하여 tr대신 처음에 소문자로 파일 이름 변환을 수행 할 수 있습니다 .

for arg 
do
  tmp="$(echo "$arg" | tr '[A-Z]' '[a-z]')"
  mv -i "$arg" "$(exiftool -CreateDate "$arg" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_$tmp"
done

다른 파일 유형에 대해 약간 다른 명령을 수행하기 위해이 스크립트에서 bash case 문을 사용할 수 있습니다. 예를 들면 다음과 같습니다.

#! /usr/bin/env bash
for filename in ./*
do
  tmp="$(echo "$filename" | tr '[A-Z]' '[a-z]')"
  case "$filename" in
    *.MOV|*.mov) 
      mv -i "$filename" "$(exiftool -a -s -CreateDate-tur "$filename" | awk -F ': ' '{print $2}' | sed -e 's/\-[0-9][0-9]\:00//g' -e 's/\+[0-9][0-9]\:00//g' -e 's/:/-/g' -e 's/ /_/g')_$tmp"
      ;;
    *.JPG|*.jpg)
      mv -i "$filename" "$(exiftool -a -s -CreateDate "$filename" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_"$tmp""
      ;;
    *)
      echo 'Not a *.jpg or a *.mov!'
      ;;
  esac
done

이 예에서, JPG 파일 이후 또는 JPG 파일이 시작되기 전 또는 이후에 시간 단위가 CreateDate 인 타임 스탬프가있는 MOV 파일의 이름을 바꾸려면 다른 (-tur) EXIF ​​데이터를 사용하여 해당 시차 접미사를 제거하고 -tur 부분 을 변경해야 할 수도 있습니다. 시스템에 설정된 위치에 따라


불행히도 제안한대로 파일 이름을 소문자로 변환하는 방법을 알 수 없었습니다 (위의 줄을 삽입하고 마지막 $i을 변경하면 $j아무것도하지 않았습니다). 대신 처음에 파일 이름 변환을 소문자로 삽입하고 답변 끝에 다른 옵션으로 추가 할 수있는 자유를 얻었습니다. 물론 원하는대로 답변을 더 편집 할 수 있습니다.
Sadi

@sadi는 신선한 눈으로 그것을보고, sed 명령으로 내가 뭘 잘못하고 있는지 볼 수 있습니다. 그럴 방법은 당신을 위해 작동하는 경우 최신 버전은하지만 물론, 작동 할 수의 미세 (나는 하나가 더 나은 영어 이외의 문자를 처리 할 나오지도 불구하고 그럴 솔루션, 실제로는 약간 더 효율적으로 될 수있는 몰래 의혹이)
evilsoup

감사합니다. MOV 파일 용 명령 하나와 다른 명령 용 명령 줄을 사용하여이 스크립트를 더욱 향상시킬 수 있는지 궁금합니다. if [extension is MOV] blah blah; 그렇지 않으면 blah blah. 그 이유는 iPad에서 MOV 파일의 "CreateDate"스탬프가 이상하게 +4 시간이라는 사실을 깨달았 기 때문에 정확한 순서의 사진과 비디오를 얻기 위해서는 다른 옵션 (CreateDate-tur)을 사용해야합니다. .
Sadi September

그것을위한 가장 좋은 방법은 (내 의견으로는) 사례 진술을 사용하는 것입니다. 여기 시작해야 할 것이 있습니다. if 문을 사용할 수도 있지만 추가 파일 확장자를 위해 case 문을 더 쉽게 확장 할 수 있습니다. 자세한 내용은 인터넷에서 'bash case statement'를 검색하십시오.
evilsoup

정말 고마워!!! 마음에 들지 않으면이 옵션을 답변에 추가하겠습니다.
Sadi

13

내 사진의 이름을 바꾸고 여기 에서이 질문을 찾았습니다 exiftool.

에서 http://www.sno.phy.queensu.ca/~phil/exiftool/filename.html

exiftool -d %Y-%m-%d_%H-%M-%S%%-c.%%e "-filename<CreateDate" DIR 

원래 파일 이름을 추적하고 확장명을 소문자로 쓰려면 :

exiftool -d %Y%m%d_%H%M%S%%-c-%%f.%%le "-filename<DateTimeOriginal" [.|DIR]

전체 파일 이름도 소문자로 동일하게 작동합니다.

exiftool -d %Y%m%d_%H%M%S%%-c-%%lf.%%le "-filename<DateTimeOriginal" [.|DIR]

DIR은 사진이 할당 된 폴더 여야합니다. Command를 실행하려는 폴더에서 터미널을 이미 열었다면 DIR을로 바꿔야합니다. 그리고 접두사를 파일 이름 (즉, IMG_)에 추가하려면 날짜 체인 앞에 따옴표없이 삽입해야합니다. 예를 들면 다음과 같습니다. exiftool -d IMG_ % Y % m % d_ % H % M % S %%-c. %% e "-filename <CreateDate".
Nothor

2

스크립트를 선호한다고 말했지만 무료 Java 응용 프로그램을 사용하는 경우 AmoK Exif Sorter를 사용할 수 있습니다

여기에 이미지 설명을 입력하십시오


1

나는 krename이것을 사용할 것이다. 그것

  • 실시간 미리보기를 보여줍니다
  • 취소 할 수 있습니다
  • 재귀 적으로 dir로 갈 수 있습니다
  • 여러 개의 이름 바꾸기 패턴을 허용
  • 패턴에서 glob 및 regexp 허용
  • 역사를 기억

0

pyrenamer는 새로 설치된 Ubuntu 16.04에서 작동하지 않으므로이 문제를 해결할 다른 방법을 찾아야합니다.

하나의 폴더에 IMG_0001.JPG, IMG_0002.JPG 등의 파일이 있습니다. 이 사이트를 확인하십시오 /programming/917260/can-var-parameter-expansion-expressions-be-nested-in-bash

"exiv2"를 먼저 설치하고 다음 명령 줄을 작성했습니다.

img의 경우 $ (ls *. [Jj] [Pp] [Gg] 2> / dev / null); exiv2 -r '% Y % m % d_ % H % M % S _' "$ (tmp = $ {img %%. *}; echo $ {tmp ## * _})"이름 바꾸기 "$ img"; 끝난

출력 파일 이름은 YYYYMMDD_HHMMSS_0001.JPG, YYYYMMDD_HHMMSS_0002.JPG 등입니다. 같은 초에 사진을 찍은 경우에도 원본 사진 일련 번호가 달라집니다.

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