看例子學 Shell Programming (6) – 將照片依日期重新照序號命名

在 FFMPEG 常用命令筆記 / 教學 的這篇文章裡,若我們要將一些照片轉換成影片時,需要先將其轉換成具有序號的檔案(ex. img-00000.jpg, img-00001.jpg…),這樣 ffmpeg 才有辦法知道誰先誰後。這些動作若用手動來做,顯得有些麻煩,如果可以用 EXIF 內的日期當先後順序,重新編號不就好了嗎!?

另外製做影片時,亦要將檔案都轉成同樣的大小,我們也在此例中展示。

依EXIF日期為先後,重命名檔案

在這個例子裡,我們將執行下列動作

  1. 將 jpg/ 目錄裡的檔案,依 EXIF 日期重新命令,以方便排序,然後存在目錄 exif/ 內
  2. 將 exif/ 內的檔案依日期排序,然後第一個重命名為 img-00000.jpg,第二個為 img-00001.jpg…
  3. 將 exif/ 內的檔案轉換成 1280×720,並且將其置中,若有空白的部份,則以黑色當背景。

從上面的圖,可以看到原始檔案有7個,但轉出來卻只有5個。這是因為其中有2個圖檔是沒有 EXIF 資訊的。

所需套件

本文參考了部份先前的教學例子 看例子學 Shell Programming (2) – 將大量JPG依EXIF日期歸檔 ,讀者也可以參看比對。此例子會用到 imagemagick 套件,做圖檔的轉換處裡,套件安裝命令如下。

 

程式碼

 

行2-4: 將中間的暫存目錄 exif 刪除,初始化 CNT 變數

行7: 針對目錄 jpg/ 內的檔案一個一個處理,檔案命名為變數 f

行9: 例用 imagemagick 的工具 identify 來取得檔案的全部 EXIF 資訊,並暫存在檔案 info。

行10: 取得 info 中有 DateTimeDigitized 的該行,然後取得日期欄位

行11: 取得 info 中有 DateTimeDigitized 的該行,然後取得時間欄位

行13-15: 若日期為空,代表沒有 EXIF 訊息,則放棄處理此檔。

行17: 將圖檔以日期/時間重命名,複製到 exif/ 目錄。

行21: exif/ 目錄此時已存有依【日期-時間】為檔名的圖檔。我們將之排序,然後依序取出,做處理。

行23: 利用 printf 指令,輸出 “%05d” 格式的字串。此格式代表5位數的數字,不足5位數則前面補0。而變數 CNT 就是已處理的檔案個數,並做為序號。

行24: 將日期命名的檔案,重新命名為依序號命名的檔案。

行25: 將序號變數+1

行29: 最後針對 exif/ 內的檔案(已是序號命名),做圖型大小轉換

行31: 以 imagemagick 轉檔程式 convert 將圖檔轉換為 1280×720 大小、置中、背景為黑色。然後儲存在與 script 同目錄的地方

 

結語

Script 真的在很多地方都用的到,一些繁鎖的小動作,用 script 來處理是非常有力的。

Latest Comments

Leave a Reply