[Mac] 用 NConvert 和 Exiftool 依照 EXIF 資料將相片批次轉正與更名

[Mac] 用 NConvert 和 Exiftool 依照 EXIF 資料將相片批次轉正與更名

很久以前在 Windows 上有用 AutoIt 寫一個 AutoPhotoCopy 的小工具

用來將記憶卡上的相片根據 EXIF 的資料,先旋轉至正確方向後,

再把檔案名稱改成日期的格式後,移動至日期的目錄下好作整理~

不過現在都改用 Mac 了,原本的程式不能跑在 Mac 上,

於是決定在 Mac 上用 shell script 寫個簡易版的 AutoPhotoCopy for Mac~

 

要寫這個 shell script,還是需要兩樣工具來輔助才行,

一個是根據 EXIF 方向資料來將相片轉正的工具,

一個是根據 EXIF 日期資料來將相片重新命名的工具~

找了一下,Mac 上有 NConvert 和 ExifTool 可以用~

 

參考資料:How to automatically rotate images based on EXIF data?

 

1. 使用 NConvert 將相片轉正

先到 NConvert 的網頁下載給 Mac 用的 NConvert for OS X,

我下載的是 NConvert 6.17 for OS X (x86)

抓下來是個 .tgz 檔案,將它解開在一個目錄下:

cd ~/Software/Multimedia/
tar zxvf ~/Downloads/NConvert-macosx.tgz

 

接著建立一個 symbolic link 到 /usr/local/bin/ 目錄下,

這樣在任意目錄下都能執行 nconvert 了:

cd /usr/local/bin
sudo ln -s /Users/testuser/Software/Multimedia/NConvert/nconvert ./

 

要將相片依照 EXIF 的方向資料轉正,可以下 -jpegtrans exif 選項,

另外加上 -overwrite 選項直接覆蓋原本的相片檔:

nconvert -jpegtrans exif -overwrite *

 

2. 使用 ExifTool 將相片檔重新命名

先用 Homebrew 安裝 Exiftool:

brew install exiftool

 

接著執行下面的指令,就能將 photo_src_folder 下的相片檔,

依照 EXIF 中記錄的日期時間,搬移並改名,

例如 2016/2/21 10:52 PM 拍的照片,就會變成 2016/[2016.02.21] xxx/20160221_105200.jpg~

這樣就能自動將相片先依年份、再依日期分到不同目錄,

而目錄名稱先取為 xxx 的目的是之後可以改名成更有意義的名稱 (像台大散步之類的):

exiftool -P -r "-FileName<CreateDate" -d "%Y/[%Y.%m.%d] xxx/%Y%m%d_%H%M%S%%-c.%%e" photo_src_folder

 

完整的 AutoPhotoCopy for Mac 原始碼如下,有興趣的人可以參考一下囉,

它會先確定 NConvert 和 ExifTool 都已經裝好,

然後去 /Volumes 目錄下找 DCIM 這個目錄

(如果有插記憶卡進來的話,相片應該會在 /Volumes/記憶卡名稱/DCIM 目錄下),

接著將 DCIM 目錄下的每張相片都先轉正後更名,搬移到最終的儲存目錄 (DST_FOLDER) 去:

#!/bin/sh
DST_FOLDER=/Volumes/MyFlashDisk/Photos
check_bin()
{
# $1 = bin
if ! which "$1" >/dev/null 2>/dev/null; then
echo "Cannot find $1, please install it first."
exit
fi
}
# Check for requirement
check_bin nconvert
check_bin exiftool
# Check for dst folder
if [ ! -d "${DST_FOLDER}" ]; then
echo "Destination folder ${DST_FOLDER} not exist. Please attach hard drive."
exit
fi
for SRC_FOLDER in $(find /Volumes -maxdepth 3 -type d -name DCIM)
do
# Rotate files
find "${SRC_FOLDER}" -iname "*.jpg" -exec nconvert -jpegtrans exif -overwrite {} \;
# Rename files
exiftool -P -r "-FileName<CreateDate" -d "${DST_FOLDER}/%Y/[%Y.%m.%d] xxx/%Y%m%d_%H%M%S%%-c.%%e" "${SRC_FOLDER}"
done
echo "Done!"

 

(本頁面已被瀏覽過 993 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料