影音數位典藏所需的自動化腳本--基礎資訊

影音數位典藏所需的自動化腳本(Bash Script)--基礎資訊


    「為什麼要學習寫程式腳本?」這是一個典藏人員會有的疑問。在傳統的典藏領域中,藏品判讀,盤點與維護等,通常佔據典藏人員大部份的工作時間。但當藏品慢慢轉到數位領域後,對於藏品的處理,通常會需要透過電腦來進行操作。在這樣的狀況下,如何讓這類的操作變得可靠與快速的技巧,便成了新一代典藏人員必需加強的目標。當然,對於只需要處理特定或少數數位藏品,或專精於實體藏品處理的典藏人員,這部份並沒有立即的需求。有空或有需要的時候再回頭來看這篇即可。

    在處理數位藏品時,自動化腳本為什麼重要?基本上可歸因於下列幾點:
  • 快速的自動化管理
    在進行數位藏品管理時,會與實體藏品一樣,經常會需要進行一些重復操作,如盤點,搬移,維護(在數位領域可能是轉碼或驗證)等。有時還會有臨時性的額外要求,例如需要輸出特殊格式的檔案。這些工作可以透過 (1)手動方式,一件一件透過拖拉,匯入轉檔軟體,逐一清點的方式處理。或 (2)寫個簡單程式,當任務來臨時便直接處理。如果要選擇方式 (2),那就需要良好的寫腳本的功力囉。

  • 強化藏品操作的可靠性
    當在操作電腦的時候,多多少少會遇到誤刪或覆蓋檔案的狀況。當使用拖拉方式將檔案從一個資料夾複製或移動到另一個資料夾時,電腦突然當機或自動更新,那檔案是否有完整複製過去?或是否有缺漏?在日常生活中,可能只是花了一整晚的報告必需重打,但在典藏領域中,這可能意味著狀況很差的藏品必需重新數位化,甚至有時已經沒有實體藏品可用。透過自動化腳本,讓電腦取代人工,以減少人為失誤的發生。對於數位典藏而言是相當重要的理由。

    在後續文章中,還會提到關於數位藏品驗證,這是用來確保每個檔案的完整性的例行任務。在這種任務中,可以精確到每格畫面的單一像素。這可能會是在幾TB,數十萬以上的檔案中找到一個檔案中存在漏碼或複製失誤。很多時候已經不是人工可以處理狀態,因此,在這樣的工作流程中加入自動化腳本,會變得相當必要。
    在寫自動化腳本時,認識工作中所使用的作業系統會是很重要的第一步。在早期的電腦中,通常可分為 類 Unix (Unix-like,泛指 FreeBSD/Linux/Mac OS X 等) 和 Windows 系統。在類 Unix 系統中,可以透過編寫 Shell script 來做為腳本。而在 Windows 中,則是透過指令列 (Dos 介面) 中的批次檔 (.bat) 來執行。 Windows 7 之後,Windows 多了 Powershell 介面,以及 Windows 10之後,Windows 可以安裝 Ubantu Linux 的子系統 (WSL) 這兩種可以執行自動化腳本的介面。

    這系列主要會是先透過Mac OS X 下的環境來進行介紹。因此想要進行練習者,需要使用 Mac OS X 的作業系統才能使用。使用 Linux 系統的電腦在編寫這些腳本時通常也能運作,但在極端狀況下還是會需要進行語法修正。在編寫腳本時最好使用純文字編輯器,以免額外的符號造成腳本判斷的錯誤。在 Mac OS X 下,除了內建的文字編輯器 ( 需設定 [格式]→[製作純文字格式] 來確保儲存檔案為純文字格式)和 終端機內輸入 nano 開啟純文字編輯器外,可能有些人愛用 BBedit 或 vim。在Linux 系統下,常見的 vi/vim 和 gedit 都是適當的工具。

    要執行腳本時,因為需要提供輸入或輸出的資訊,因此通常會需要在指令列的工作環境下執行。在 Mac OS X 中,可透過 [Finder] → [應用程式] → [工具程式] → [終端機] 的方式,或直接使用放大鏡尋找名為 [終端機]/[Terminal.app] 的方式開啟。開啟後會出現如下面畫面:
這裡是使用者的家目錄,通常是在 /User/[使用者名稱]   這個資料夾中,也就是 [Finder] 的家目錄所在的位置。

基本指令

    自動化腳本與一般程式語言不同,它其實只是一種可被編輯的純文字檔,可以透過這個檔案讓使用者一次執行多個指令。有時候也會在腳本中加入一些運算或邏輯判斷來達到部份功能。因此在撰寫腳本前,必需先知道在指令列中如何下達指令。

    基本的指令下達方式會是如下:
bash-4.4$ command [-option] parameter1 parameter2c    
                        指令(程式/腳本)       選項              參數1            參數2

    其中指令的開頭一定是程式或可執行的檔案(腳本),有的程式可以在所有資料夾位置都能執行,如切換工作目錄的指令 cd 等,但大部份使用者自己寫入的腳本只能在檔案所屬的資料夾中工作。要解決這樣的方式,可以透過輸入完整路徑,如:
bash-4.4$ /Users/mpcb/Downloads/ffmpeg/ffmpeg -version   
或在圖型介面下,使用拖拉方式將腳本拉進指令列視窗中。

    中括號 [] 中的部份是可選擇的設定選項,通常會在前面加上 - 號,例如 -v 或有時會使用全名 -versionparameter1 和 parameter2  是指令所要作用的參數,例如切換目錄時的目標位置。

    指令,選項,參數等這些部份中間以空格來區分,不論幾格都視為一格。由於空格是很重要的特殊字元,因此當檔名出現空格時會被誤認,雖然可以透過在空格前加上反斜線(\)來解決,但在進行檔案命名時應盡可能避免使用空格。反斜線(\)的另一個功能是換行,讓長指令可拆分為數行,讓指令更具可讀性。當指令輸入完畢後,按下[Enter]鍵後,便會開始執行。

    常用的基本指令有下列幾個:
  • cd Folder_name
    表示資料夾的移動,如 cd .. 表示向上一層,cd ~ 表示回到家目錄,cd Desktop 是下移到 Desktop 這個資料夾 (如果這個資料夾存在,不存在時會出現 cd: no such file or directory 的錯誤訊息)。
  • ls 與 ls -al
    用於顯示資料夾內容。 -al 這個參數表示顯示所有資訊,在主指令後面空一格加上參數也是指令使用的方式。

    此圖中: . 表示當前資料夾。.. 表示當前資料夾。最左側是這些檔案或檔案的讀/寫/執行( rwx )的權利,如 test_dir 的最左側以 d 開始,表示這是一個資料夾。test.sh 的最左側以 -rw 開始,表示這是一個可讀寫的檔案。bash.sh 左側有 rwx ,表示這是一個可讀寫和執行的檔案。要執行的腳本必需有 rwx 的權限。
  • chmodchmod +x file_name
    用於修改檔案或檔案夾的權限,+x 表示將該檔案權限修改為可執行的狀態。如下圖:

  • sh script_name 或 ./script_name
    執行腳本檔案的方式。如下圖

  • mkdir Folder_name
    用於新增資料夾,建議開啟一個資料夾供工作或練習使用。如下圖中,新增了一個名為 new_dir。

  • cat File_name
    顯示檔案內容。如下圖中,顯示檔案 test.sh 是由這兩行文所組成。

    在學會這些基礎指令後,下篇文章便可以開始進行基礎腳本編寫,與練習如何讓腳本可以輸入與輸出資訊,與使用 if 函式進行判斷。


留言

這個網誌中的熱門文章

低成本的數位影像修復 (OpenCV Inpainting)

影音類載體 -- 聲音類 -- 8軌匣式錄音帶(8 track tape)

影音數位典藏所需的自動化腳本(Bash Script)--函式