Mac 平台如何批量將圖片文件名中的時間寫入 EXIF 信息?

有一批老相片,不知道為何 EXIF 信息缺失,在 Dropbox / Caroousel 裡面瀏覽非常辛苦,現在只有帶日期和時間格式的文件名,能夠將其批量寫入這批相片的 EXIF 信息里去嗎?

或者妥協,能否有批量寫入 EXIF 信息的方案?不要求自動從文件名裡面獲取,可以手動填


用 ExifTool by Phil Harvey 可以很容易做到,ExifTool 是個用 Perl 編寫的庫,同時附帶了一個命令行應用。僅用命令行工具,就幾乎可以做與文件元數據相關的任何操作。

ExifTool 可以方便地查看、修改、導入或導出單個或多個文件的元信息,包括 PDF、DOC 甚至 EXE 多種格式在內的 EXIF、IPTC 和 XMP 信息。 JPG 的 EXIF 自然不在話下。(在官網首頁的 Supported File Types 一節可以看到全部支持的格式)

ExifTool 既有 Win 版也有 OS X 版,只需要 Perl 即可運行,下面的演示都是在 OS X 上進行的。

一、查看信息

瀏覽一張圖片的全部元信息:

exiftool IMG_0894.JPG

(省略結果)

通過加上參數,可以瀏覽一張圖片的指定 EXIF 屬性,參數的名稱通常是屬性名本身去掉空格,比如圖片數字化日期:

exiftool -createdate IMG_0894.JPG

Create Date : 2013:11:05 14:48:09

也可以同時輸入多個參數,返回多個結果:

exiftool -iso -imagesize IMG_0894.JPG

ISO : 80
Image Size : 1936x2592

通過輸入目錄名,還可以查看多個文件的信息:

exiftool -imagesize pics

======== pics/2009-09-30 15-28-16.jpg
Image Size : 566x480
======== pics/2010-02-10 08-12-45.jpg
Image Size : 180x180
======== pics/220ppi.png
Image Size : 1000x1000
======== pics/IMG_0894.JPG
Image Size : 1936x2592
======== pics/kokuhaku.mkv
Image Size : 1024x576
1 directories scanned
5 image files read

通過通配符,只查看 jpg 格式的文件信息(大小寫敏感):

exiftool -imagesize pics/*.jpg

======== pics/2009-09-30 15-28-16.jpg
Image Size : 566x480
======== pics/2010-02-10 08-12-45.jpg
Image Size : 180x180
2 image files read

二、修改信息

在參數後加入「=」等符號,即可修改文件的某個元信息。

所有對元信息的修改都會產生一個「_original」的備份文件,可以通過加上「-overwrite_original」參數來阻止這一行為。

用「=」設置某個信息:

exiftool -iso IMG_0894.JPG

ISO : 80

exiftool -iso=100 IMG_0894.JPG

1 image files updated

exiftool -iso IMG_0894.JPG

ISO : 100

用「-=」或「+=」來讓一個參數位移,對於一些因記憶重置造成的整體拍攝時間位移,可以結合上面的批量選擇來批量修改:

exiftool -DateTimeOriginal IMG_0894.JPG

Date/Time Original : 2013:11:05 14:48:09

exiftool -DateTimeOriginal+="00:01:03 10:0:0" IMG_0894.JPG

1 image files updated

exiftool -DateTimeOriginal IMG_0894.JPG

Date/Time Original : 2013:12:09 00:48:09

(如果要寫入的內容包含空格或特殊字元,那麼需要用引號引起)

還可以用「&<」來通過某個參數來設置信息,比如用圖片尺寸(imagesize)來設置文件名(filename):

exiftool "-filename&<%f_$imagesize.%e" IMG_0894.JPG 1 image files updated

這個命令可以將「IMG_0894.JPG」更名為「IMG_0894_1936x2592.JPG」:其中 %f 為文件原名,%e 為文件的擴展名(更多格式碼可以參見文檔 FileName and Directory tags 的 Common Date Format Codes 一節)。一旦出現格式碼,就要在 imagesize 這個屬性前加上「$」。

(如果出現了「&<」號,那麼整個參數都需要用引號引起。)

因此,將批量文件的文件名中時間信息導入到 DateTimeOriginal 屬性,可以這樣實現:

exiftool -filename -DateTimeOriginal *.jpg

======== 2009-09-30 15-28-16.jpg
File Name : 2009-09-30 15-28-16.jpg
======== 2010-02-10 08-12-45.jpg
File Name : 2010-02-10 08-12-45.jpg
2 image files read

exiftool "-DateTimeOriginal&

exiftool -filename -DateTimeOriginal *.jpg

======== 2009-09-30 15-28-16.jpg
File Name : 2009-09-30 15-28-16.jpg
Date/Time Original : 2009:09:30 15:28:16
======== 2010-02-10 08-12-45.jpg
File Name : 2010-02-10 08-12-45.jpg
Date/Time Original : 2010:02:10 08:12:45
2 image files read

兩張圖片都被加上了原文件日期,注意 ExifTool 自動將文件名的擴展名去掉,並將文件名中的「-」替換為「:」

預覽可以查看到被新添加的 EXIF 信息,Dropbox 當然也可以。

基於同樣的道理,視頻文件的 Date/Time Original 屬性,當然也可以被查看、修改和批量修改,這裡就不用再說了吧~:

exiftool -datetimeoriginal kokuhaku.mkv

Date/Time Original : 2011:02:09 10:49:56Z

三、導入與導出元信息

在命令的最後加入「&>」並指向某個文件,可以將屏幕輸出結果導出到某個文件,添加「-T」「-csv」或者「-json」等參數,還可以指定輸出格式。而將某個文件反過來用「&>」指向文件或文件夾,也可以反過來將元信息導入文件,在官方的 ExifTool FAQ 的第十二問與第二十六問分別有導入和導出的說明。

總之,exiftool 可以幫助做任何與元數據相關的操作,可以做與元數據相關的任何事情。憑藉 Perl 庫的形式嵌入別的程序中,還可以發揮更大的價值。如果對更多、更高級、更全面的功能感興趣,一定要讀一讀官方文檔:ExifTool by Phil Harvey。


libexiv2/pyexiv2


lightroom.


推薦閱讀:

OS X 上沒有安全管家、網銀保鏢等安全軟體,能放心使用網銀嗎?
Tweetbot 圖標的設計意圖是怎樣的?
VMware Fusion 7 for Mac 跟 Parallels Desktop 10 對比如何?
有哪些圖標特別丑但是好用的 Mac 應用?

TAG:macOS應用 | Automator | EXIF |