使用 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 數據,所有這些都來自照片的文件名?更新:@Stephane 非常友好地回答了我關於使用 DD-MM-YY 和 12 小時時間解析文件名的問題(現在的第 1 部分)。但我發現同一批照片包含的文件名有一個我錯過的變體。我希望添加一個“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
Stephane 腳本的一部分似乎表明我對其中最重要部分發生的事情一無所知。我嘗試省略該
Date_Init
行,因為我們回到了 ISO 風格的全年日期格式,然後有了/on (.*?at.*?)/;$_=$1; y/./:/;$_=UnixDate($_,"%Y-%m-%d %T") ' ./*on\ *at*.jpg
而是
exiftool
給我no writeable tags
和FileName not defined
。http://search.cpan.org/~sbeck/Date-Manip-5.56/lib/Date/Manip.pod上的說明似乎對理解這些時期的情況沒有幫助(至少對我而言),行首的’y’,分號等,而且它們相當難以搜尋:S
嘗試:
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}
可用於擴展為 的值。tag``perl-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
.