使用 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

ETC。

(「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

更多解釋:

嘗試編輯Date::Manip史蒂芬劇本的部分似乎表明我對其中最重要部分的情況一無所知。

我嘗試省略該Date_Init行,因為我們回到了 ISO 式的全年日期格式,然後

/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」、分號等,而且它們相當無法用谷歌搜尋:S

答案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.

相關內容