EXIFTool을 사용하여 파일 이름에서 EXIF ​​데이터 추가

EXIFTool을 사용하여 파일 이름에서 EXIF ​​데이터 추가

다음과 같이 파일 이름에 타임스탬프가 포함된 사진 세트가 있습니다.

Photo on 3-09-12 at 9.24 PM #2.jpg

Photo on 3-09-12 at 9.24 PM #1.jpg

Photo on 3-09-12 at 8.23 PM.jpg

등.

("3-09-12"는 "2012년 9월 3일" 또는 DD-MM-YY를 의미합니다)

하지만 이 사진에는 EXIF ​​데이터가 전혀 없습니다. 이 exiftool정보를 더 큰 컬렉션으로 가져오기 전에 EXIF ​​​​데이터(모두 사진 파일 이름)로 새 타임스탬프를 추가하도록 어떻게 이 정보를 파이프하고 지시할 수 있습니까 ?

고쳐 쓰다: (현재 1부) DD-MM-YY 및 12시간 파일 이름 구문 분석에 대한 질문에 @Stephane님이 친절하게 답변해 주셨습니다. 그러나 나는 동일한 사진 모음에 내가 놓친 파일 이름의 변형이 포함되어 있다는 것을 발견했습니다. "Pt"를 추가하는 것이 더 의미가 있기를 바랍니다. 2' 완전히 새로운 질문을 시작하는 대신.

요컨대:

@Stephane의 훌륭한 답변을 어떻게 바꿀 수 있습니까?

exiftool '-CreateDate<${FileName;use Date::Manip;
                      Date_Init("DateFormat=non-US");
                      /on (.*?at.*?[AP]M)/;$_=$1;
                      y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
                      }' ./*on\ *at*[PA]M*.jpg

-- 다음 파일 이름 형식을 사용할 수 있습니다. 이는 YYYY-MM-DD 및 24시간 시간을 사용한다는 점에서 질문의 첫 번째 부분과 약간 다릅니다.

Photo on 2010-09-15 at 18.44 #4.jpg

Photo on 2010-09-15 at 18.44 #3.jpg

Photo on 2010-09-15 at 18.44.jpg

추가 설명:

Stephen의 대본의 일부를 편집하려고 시도하는 것은 Date::Manip그 대본의 가장 중요한 부분에서 무슨 일이 일어나고 있는지 전혀 모른다는 것을 의미하는 것 같았습니다.

Date_InitISO 스타일의 연중 날짜 형식으로 돌아왔으므로 해당 줄을 생략하려고 했습니다 .

/on (.*?at.*?)/;$_=$1;
y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
' ./*on\ *at*.jpg

하지만 exiftool나에게 no writeable tagsFileName not defined. 지침은 다음 위치에 있습니다.http://search.cpan.org/~sbeck/Date-Manip-5.56/lib/Date/Manip.pod이 기간에 무슨 일이 일어나고 있는지, 줄 시작 부분의 "y", 세미콜론 등을 이해하는 데 (적어도 나에게는) 도움이 되지 않는 것 같으며 검색이 거의 불가능합니다.

답변1

노력하다:

exiftool '-CreateDate<${FileName;use Date::Manip;
                      Date_Init("DateFormat=non-US");
                      /on (.*at.*?)(?: #\d+)?\.jpg$/;$_=$1;
                      y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
                      }' ./*on\ *at*.jpg

(이 모듈을 설치해야 할 수도 있습니다 Date::Manip perl).

-Tag<value적절한 태그를 설정하십시오 . 처리 후 ${tag;perl-code}의 값으로 확장하는 데 사용할 수 있습니다.tagperl-code

여기서는 계획된 Date::Manip함수를 사용하여 UnixDate파일 이름의 날짜를 구문 분석하고 태그 CreateDate( )에 2011-04-15 21:38:00허용되는 형식 으로 변환합니다.

Date::Manip다양한 일반적인 날짜 형식을 이해합니다. 예를 들어, 3-09-12 at 9:24 PM일이나 월이 먼저 오는 것이 미국인지 미국 이외의 규칙인지 알려야 하지만) 및 2010-09-15 at 18.44( :대신 메모 .)을 이해합니다.

따라서 우리가 해야 할 일은 파일 이름에서 해당 부분을 추출하여 .변환 :하고 UnixDate.

관련 정보