HandyMKV 是一款旨在自動化使用 MakeMKV 擷取光碟內容,然後使用 HandBrake 編碼輸出檔案的工具。
我發現手動使用 MakeMKV 擷取,然後再使用 HandBrake 編碼的過程非常耗時、零散且容易出錯。我想要一個能自動化這個過程並提供更使用者友善體驗的工具。此外,我還想將這個過程從我的主要桌上型電腦轉移到我無頭(headless)且沒有圖形使用者介面(GUI)的家用伺服器上。HandyMKV 的創建就是為了滿足這些需求。
在開發 HandyMKV 的過程中,我發現我能夠添加一些我認為有用且能讓過程更快更容易的功能。我希望其他人也能發現 HandyMKV 有用,並為他們節省時間和精力。
它的主要目標是透過消除手動執行這些任務的斷開連接性質和/或順序執行,來節省時間和精力。並行處理(Concurrency)被用來減少完成整個過程所需的總時間。
HandyMKV 的設計易於設定和使用。一旦創建了設定檔,擷取和編碼光碟的過程就簡化為一個單一指令和幾個提示。
輸出的進度會以清晰簡潔的方式顯示,讓使用者隨時了解任務的進度。
HandyMKV 的設計非常靈活。使用者可以選擇要從光碟擷取的標題,並可以根據自己的需求配置編碼選項。編碼選項可以透過三種方式設定:
HandyMKV 設計用於 Windows、macOS 和 Linux。
MakeMKV 是一個用於將光碟內容擷取到本機系統檔案的工具。注意:此工具不是免費的,必須購買授權才能使用。
具體來說,makemkvcon 指令用於從命令列與 MakeMKV 互動。makemkvcon 指令必須在系統路徑(system path)中,HandyMKV 才能正常工作。
MakeMKV 可在此處下載。
makemkvcon 的文件可在此處找到。
安裝 MakeMKV 時,makemkvcon預設不會包含在 $PATH 中。然而,該二進位檔案包含在 MakeMKV.app 捆綁包中。該二進位檔案位於 /Applications/MakeMKV.app/Contents/MacOS/makemkvcon。您可以將其添加到您的 $PATH,或在一個位於您的 $PATH 的目錄中創建一個符號連結(symlink)指向它。
Handbrake 是一個用於編碼影片檔案的工具。HandBrakeCLI 指令用於從命令列與 Handbrake 互動。HandBrakeCLI 指令必須在系統路徑中,HandyMKV 才能正常工作。
HandBrakeCLI 可在此處安裝。注意:HandBrake 可免費使用。有關更多資訊,請參閱 HandBrake 網站。
HandBrakeCLI 的文件可在此處找到。這對於 HandyMKV 的使用不是必需的,但對於理解上下文很有用。
HandyMKV 具有多個命令列選項和子命令,可用於控制其行為。
在 Linux 或 macOS 上安裝 HandyMKV 的最快方法是使用安裝腳本:
該腳本會自動偵測您的作業系統和架構,從最新版本下載適當的二進位檔案,並將其安裝到 /usr/local/bin(如果 /usr/local/bin 不可寫,則安裝到 ~/.local/bin)。
預先建置的二進位檔案可在 Releases 頁面上找到,支援以下平台:
下載適合您系統的二進位檔案,將其放置在您的 $PATH 中的一個目錄裡,即可開始使用。
HandyMKV 可使用 go install 指令安裝:
這需要在系統上安裝 Go。Go 可在此處安裝。
如果您已克隆儲存庫,您可以使用提供的 Makefile 或直接使用 Go 指令來建置 HandyMKV。
Makefile 提供了針對不同平台建置 HandyMKV 的便利目標:
這將在 bin/handymkv(或 Windows 上的 bin/handymkv.exe)中創建一個二進位檔案。
這會將二進位檔案安裝到您的 Go bin 目錄,使其可在系統範圍內使用。
為所有支援的平台進行交叉編譯:
這會在 bin/ 下的獨立子目錄中為 Linux、macOS 和 Windows(AMD64 和 ARM64 架構)建置二進位檔案。
為特定平台進行交叉編譯:
或者,您可以使用 Go 指令進行建置:
第一步是創建一個設定檔。可以透過執行以下指令來完成:
這將啟動設定精靈。它會提示您輸入編碼設定和各種操作設定。儲存後,設定將儲存在名為 config.json 的檔案中。該檔案的位置取決於使用的是使用者級別還是目錄級別的設定。
然後,要擷取和編碼光碟,請執行以下指令:
這將首先讀取光碟上的標題,並提示您選擇要擷取的標題。標題的選擇是透過提供每個標題的索引來完成的。可以透過提供逗號分隔的列表來選擇多個標題。範例:0, 1, 3,4。選擇要擷取的標題後,過程將開始。過程的進度將在終端機中顯示。
過程完成後,將顯示一個摘要,顯示節省的空間和完成過程所需的時間。
所有輸出檔案將儲存在設定檔中指定的目錄裡。
注意:如果在執行時工作目錄中存在 config.json 檔案,則將使用該檔案而不是使用者級別的設定檔。
每次執行後,HandyMKV 會寫入一個記錄檔,記錄擷取和編碼的內容、檔案大小以及是否刪除了原始 MKV 檔案。這些記錄檔可以隨時使用 history 子命令進行瀏覽。
這將顯示要刪除的檔案數量,並在繼續之前提示確認。
預設情況下,記錄檔與主設定檔一起儲存:
可以在設定精靈(handymkv config setup)期間設定自訂目錄,或透過在 config.json 中設定 manifest_directory 來設定。
可以透過設定精靈或在 config.json 中設定 "disable_manifests": true 來完全禁用運行歷史記錄。禁用後,handymkv history 和 handymkv history clear 將顯示一條資訊性訊息,而不是嘗試讀取或修改記錄檔。
自動化(Automations)允許您在 HandyMKV 完成編碼後運行本機腳本或指令。每個自動化都是一個獨立的設定,定義了要運行的指令及其所需的參數。參數可以從不同來源獲取:在運行時提示、硬編碼的靜態預設值,或從 HandyMKV 運行數據自動填充。
腳本將參數作為環境變數接收,前綴為 HMKV_PARAM_。例如,名為 destination_dir 的參數會變成 HMKV_PARAM_DESTINATION_DIR。選擇環境變數而不是命令列參數是為了最大化與不同程式語言和作業系統的相容性——參數解析約定在不同 shell 和運行時差異很大(標誌前綴、引號規則、空格處理),而環境變數的讀取方式在任何地方都是相同的。
自動化檔案以 JSON 格式儲存在:
Unix 注意:腳本在 HandyMKV 運行它們之前必須是可執行的。創建腳本後,請務必運行 chmod +x /path/to/your/script.sh。
使用 -a 標誌按名稱指定自動化:handymkv -a move-to-plex,notify-discord
自動化在編碼完成後運行。如果提供了相同的名稱多次,它只會運行一次。
創建自動化時,每個參數都有一個來源,決定了其值的獲取方式:
腳本繼承完整的作業系統環境,因此它們可以直接讀取環境變數(如 API 金鑰或 webhook URL),而無需專門的參數。
注意:自動化在原始 MKV 檔案被刪除之前運行。如果您的腳本需要處理原始檔案(例如檢查或移動它們),它將可以透過 mkv_output_dir 訪問它們。
使用包含的範例腳本創建自動化:
該腳本會去除 MakeMKV 添加到檔案名稱結尾的 _t## 識別符(例如 My_Movie_t00.mkv → My_Movie.mkv),設定群組擁有權和權限,然後將檔案移動到目標目錄。
如果自動化腳本失敗(非零退出碼),HandyMKV 會發出警告並繼續執行下一個自動化。腳本失敗永遠不會中止整個流程。
退出碼會記錄在運行記錄檔中,並在檢查運行歷史記錄時(handymkv history <number>)可見。
範例自動化腳本可在儲存庫的 examples/automations/ 目錄下找到。它展示了所有三種類型的參數來源:hmkv_output(編碼輸出目錄)、prompt(目標媒體目錄)和 static(群組名稱)。
HandyMKV 支援在單次運行中擷取和編碼多個光碟。此選項適用於有多個光碟機可用並連接到主機的情況。
在這種多光碟運行期間,輸出檔案將被分類到子目錄中,指示它們來自哪個光碟。
要擷取和編碼多個光碟,只需將光碟索引的逗號分隔列表提供給 -d 標誌。範例:handymkv -d 0,1,2。
要查看可用光碟的列表,請使用 discs 子命令。範例:handymkv discs。
HandyMKV 將嘗試並行執行任務以減少完成過程所需的總時間。然而,編碼任務是資源密集型的,運行多個編碼任務可能會減慢整體過程。同樣,擷取任務受限於光碟機的速度。因此,HandyMKV 將並行執行擷取和編碼管道,但這些管道中的每個任務將按順序執行。在多光碟運行中,每個光碟機的擷取過程將並行處理。