在 FFMPEG 常用命令筆記 / 教學 的這篇文章裡,若我們要將一些照片轉換成影片時,需要先將其轉換成具有序號的檔案(ex. img-00000.jpg, img-00001.jpg…),這樣 ffmpeg 才有辦法知道誰先誰後。這些動作若用手動來做,顯得有些麻煩,如果可以用 EXIF 內的日期當先後順序,重新編號不就好了嗎!?
另外製做影片時,亦要將檔案都轉成同樣的大小,我們也在此例中展示。
依EXIF日期為先後,重命名檔案
在這個例子裡,我們將執行下列動作
- 將 jpg/ 目錄裡的檔案,依 EXIF 日期重新命令,以方便排序,然後存在目錄 exif/ 內
- 將 exif/ 內的檔案依日期排序,然後第一個重命名為 img-00000.jpg,第二個為 img-00001.jpg…
- 將 exif/ 內的檔案轉換成 1280×720,並且將其置中,若有空白的部份,則以黑色當背景。
從上面的圖,可以看到原始檔案有7個,但轉出來卻只有5個。這是因為其中有2個圖檔是沒有 EXIF 資訊的。
所需套件
本文參考了部份先前的教學例子 看例子學 Shell Programming (2) – 將大量JPG依EXIF日期歸檔 ,讀者也可以參看比對。此例子會用到 imagemagick 套件,做圖檔的轉換處裡,套件安裝命令如下。
1 |
sudo apt-get install imagemagick |
程式碼
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 |
#!/bin/bash rm -rf exif mkdir exif CNT=0 # 將檔案以 EXIF 日期/時間重命名,方便依日期排序 for f in `ls jpg` do identify -format '%[EXIF:*]' "jpg/$f" > info # 取得檔案的 EXIF 資訊 date=`grep DateTimeDigitized info | cut -d= -f 2 | cut -d' ' -f 1 | sed 's/:/-/g'` #取得日期 time=`grep DateTimeDigitized info | cut -d= -f 2 | cut -d' ' -f 2 | sed 's/:/-/g'` #取得時間 if [ "$date" = "" ];then # 若沒有 EXIF, 則忽略此檔案 echo "$f exif info not found. ignore" continue fi echo $f is at $date $time cp jpg/$f exif/${date}_${time}.jpg #若不想重壓縮,可直接用mv搬移即可 done # 將檔名排序,並依序號重命名 for f in `ls exif | sort` do name=`printf "%05d" $CNT` mv exif/$f exif/img-${name}.jpg CNT=$(( $CNT + 1 )) done #將檔案轉換成 1280x720 置中,空白的部份以黑色當背景 for f in `ls exif` do convert exif/$f -background black -gravity center -resize 1280x720 -extent 1280x720 $f done |
行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