有一組照片的檔案名稱中帶有時間戳,如下所示:
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 tags
和FileName 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}
用來擴展為 的值。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
.