EXIFTool

過去拍完 raw 檔,回來後製轉檔為 jpeg 時,常用的軟體是 BreezeBrowser Pro,這套軟體好處是批次處理方便,出去旅遊回來動輒上百張的照片,如果一張張用 Canon 附贈的 DPP 來轉檔,那不知道要轉到什麼時候,這時候用 BreezeBrowser Pro 就很好用。然而,我覺得 BreezeBrowser Pro 轉出來的 jpeg 檔畫質總是沒有 DPP 來得細緻,但是為了節省時間似乎也只能暫時妥協。

DPP 從 2.0 以後就加入了批次處理的功能,同時還加上了 Canon 特有的 Picture Style 參數調整,於是批次處理照片不再是夢靨。最近 DPP 更新推出 3.0 版本,還加上了雜訊抑制的功能,讓原本雜訊純淨度有極佳表現的 Canon CMOS,這下子更是如虎添翼。

於是最近幾次的後製,就開始轉為使用 DPP 來批次轉檔。不過發現了另一個問題,DPP 似乎轉檔時,並不會將所有的 EXIF tag 完整複製到轉出的 jpeg 檔中,只保留少許重要的資訊,例如:曝光模式、白平衡、閃燈等資訊就付之闕如。真是有一好沒兩好。

於是又求助股溝大神,看看別人是如何解決這個問題,找了很久只有人提到這個問題,但也沒人說該怎麼解。最後找到有人提到 EXIFTool 這套小工具,可完整從 raw 檔複製所有的 EXIF tags 到指定的檔案中,於是就解決我的問題,只要將 DPP 轉出來的 jpeg 再用這個小工具從 raw 檔將 EXIF 複製過來即可,而且這個工具是用 perl 寫的,所以在 Linux 上寫個 shell script 去做批次複製更是沒問題。

寫了下面的 script 來做批次轉檔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34


#!/bin/sh

if [ $# = 0 ]; then
    echo "Usage : copy_exif.sh <RAW_SOURCE_FOLDER>"
    exit
fi

RAW_SOURCE_FOLDER=$1

for file in `ls *`
do
    if [ -f $file ]; then
        PREV_FILENAME=`echo $file|awk -F"." '{print $1}'`
        EXT_FILENAME=`echo $file|awk -F"." '{print $2}'`

        RAW_FILE_LOWER=$RAW_SOURCE_FOLDER/$PREV_FILENAME.cr2
        RAW_FILE_UPPER=$RAW_SOURCE_FOLDER/$PREV_FILENAME.CR2
        EXIFTOOL_BACKUP_FILE=`echo "$file"_original`

        if [ -f $RAW_FILE_LOWER ]; then
            echo Copying EXIF tags from $RAW_FILE_LOWER to $file
            exiftool -TagsFromFile $RAW_FILE_LOWER $file
            rm $EXIFTOOL_BACKUP_FILE
        else
            if [ -f $RAW_FILE_UPPER ]; then
                echo Copying EXIF tags from $RAW_FILE_UPPER to $file
                exiftool -TagsFromFile $RAW_FILE_UPPER $file
                rm $EXIFTOOL_BACKUP_FILE
            fi
        fi
    fi
done

用法為在轉檔完畢的 jpeg 目錄下面執行,給定一個 raw 檔的來源目錄即可

copy_exif.sh <RAW_SOURCE_FOLDER>

發佈留言

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

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