2026年租用 Mac Mini 夜間影片轉碼長跑決策佇列
臨時盤路徑、ffmpeg 並行度與失敗退避參數清單
🎬 租用 Mac Mini做夜間影片轉碼長跑時,成敗繫於臨時 IO、ffmpeg 並行邊界與失敗退避契約。本文含路徑/並行矩陣、磁碟水位、launchd/佇列欄位、七步與 FAQ。延伸:APFS 水位、排程矩陣、批次退避;首頁。
痛點拆解
- 暫存與成品同盤:大檔中繼寫滿系統卷,APFS 可用空間驟降導致整機卡頓。
- 並行誤設:
threads拉滿卻多路齊開,記憶體頻寬成瓶頸,遠端畫面掉幀。 - 重試無契約:斷線或磁碟滿時秒級重試放大損害,佇列無熔斷。
臨時盤路徑決策矩陣
依可控、可預估、可清理三軸選路徑;TMPDIR、暫存與輸出同源或同卷,減少跨卷搬移。
| 方案 | 適用 | 風險 | 建議環境變數/參數 |
|---|---|---|---|
| 使用者家目錄下 work | 長租單一專案 | 與桌面同卷需盯水位 | TMPDIR=$HOME/transcode/work/tmp |
| 獨立資料夾掛載點 | 大量中繼檔 | 掛載失敗要有檢查 | 輸出與暫存同父層,尾碼分 staging/done |
| 僅系統暫存 | 極小試跑 | 重啟或清道夫干擾 | 不建議夜間長跑預設 |
ffmpeg 並行度與同時工作數
軟編碼以單工作 threads 對齊核心;多工作設全域上限。硬體路徑預留記憶體與解碼執行緒。
| 情境 | 單工作 threads | filter_threads | 同時工作數 |
|---|---|---|---|
| 日間互動窗 | 實體核心減二 | 一至二 | 一 |
| 夜間批次窗 | 實體核心減一 | 二至四視濾鏡 | 二或三試量測 |
| 七乘二十四低優 | 半數核心 | 保守 | 一且 nice 提高 |
磁碟水位與清尾策略
可用百分比與絕對吉字节雙條件;觸發後暫停入隊、清 staging 與殘骸再恢復。
- 🟡 黃線:可用低於百分之十五或低於三十吉字节:降並行、停新檔入列。
- 🔴 紅線:可用低於百分之八:強制排空佇列頭、只允許收尾工作。
- 🧹 清尾:週期刪除超過七日的
*.tmp與無對應成品的中繼目錄。
七乘二十四與夜窗排程
七乘二十四為常駐守護與撿重試;夜窗為時段拉高並行。日間 profile 保守、夜間積極,以環境變數切換(見排程矩陣)。
launchd 與佇列工具參數
launchd 建議 Nice、ThrottleInterval、ProcessType Background、唯一 Label;長指令腳本化並寫日誌。GNU parallel 或迴圈加 flock 防雙實例。
launchd 片段(欄位說明)
<key>Nice</key><integer>10</integer>
<key>ThrottleInterval</key><integer>30</integer>
<key>StartCalendarInterval</key>
<dict><key>Hour</key><integer>22</integer><key>Minute</key><integer>0</integer></dict>
<key>ProgramArguments</key>
<array><string>/bin/bash</string><string>-lc</string>
<string>exec /opt/runmini/bin/transcode-queue.sh --profile night</string>
</array>
GNU parallel 示例(控制槽位與失敗行為)
parallel -j 2 --delay 5 --retries 3 --joblog /var/log/transcode/job.log \
ffmpeg -y -i {} -c:v libx264 -preset medium -threads 4 {.}.mp4 ::: /data/in/*.mov
失敗退避參數清單
| 結束情境 | 是否重試 | 建議退避 |
|---|---|---|
| 網路中斷、裝置忙碌 | 可 | 指數:三十秒起,上限三十分鐘,最多五次 |
| 磁碟滿、權限拒絕 | 先否 | 告警後人工或清尾再單次重試 |
| 來源檔毀損 | 否 | 移入隔離目錄記錄 checksum |
買租一句話
若夜窗即可消化產能、且希望免資本支出與機房維運,租用通常較穩;僅當全年滿載且內網合規成本已攤平時,再評估自購。
落地七步
- 建立 work/tmp/staging/done/quarantine 目錄樹並設定 TMPDIR。
- 以十分鐘試跑單檔,量測 CPU、記憶體、磁碟頻寬 再填並行表。
- 寫入日間/夜間兩套 profile,排程切換環境變數。
- 為佇列加上df 前置檢查與黃紅線停復牌。
- launchd 或 cron 觸發主腳本,日誌集中並輪轉。
- 包一層退避與最大重試,錯誤碼分類入庫。
- 晨間抽查成品 mux、長度、checksum,週期對照矩陣調參。
可引用要點
- 單卷原則:暫存與輸出同卷可降峰值複製時間。
- 夜窗放大前先確認快照與備份不與轉碼撞車(見水位 FAQ)。
- joblog 欄位至少含檔名、耗時、結束碼、重試次利於審計。
常見問題
夜間轉碼應把臨時檔放在哪裡?
優先使用租戶專屬資料夾或獨立卷上的 work 目錄,並以 TMPDIR 與暫存參數指向該路徑;避免僅依賴重開機會清空的共用暫存,以降低與其他任務的 IO 衝突。
ffmpeg 並行度如何訂才不會拖垮遠端桌面?
以實際量測為準:軟體編碼時 threads 約取實體核心數減一至二,並限制同時工作數;日間互動窗可將同時工作數壓為一,夜窗再提高。硬體編碼路徑須另留記憶體與頻寬余量。
失敗退避建議哪些參數?
區分可重試與不可重試結束碼;可重試採指數退避(例如三十秒起、上限三十分鐘)、上限次數三至七次,並在磁碟水位或權限錯誤時改為人工介入而非盲目重試。
為何 launchd 要設 ThrottleInterval?
抑止腳本快速反覆啟動造成 CPU/日誌風暴;與退避疊加時建議不低於三十秒。