2026 租用 Mac Mini 夜间视频转码长跑
决策队列:临时盘路径、ffmpeg 并行度与失败退避参数清单
2026年3月31日
RunMini 技术团队
阅读时间:约 8 分钟
💻🎬 把租用 Mac Mini当成夜间转码工人时,真正决定稳定性的是临时盘写放大、ffmpeg 并行与线程乘积,以及失败后的退避策略。本文给七乘二十四与夜间窗下的路径、并发、launchd 与队列工具参数和磁盘水位决策表;买机器适合固定峰值与资产折旧能接受的一方,租用更适合按窗弹性摊销机时。延伸阅读:七乘二十四调度矩阵、APFS 磁盘水位 FAQ、批处理退避矩阵。
痛点拆解
- 默认临时目录踩雷:系统卷与编解码缓存同盘,长跑易顶满根分区。
- 并行度爆炸:多路进程各自
-threads,总线程超过性能核加能效核预算会抖动掉帧式卡顿。 - 失败风暴:坏源或网络挂载抖动时紧循环重试会打满中央处理器与日志盘,需要指数退避与上限。
临时路径 × 七乘二十四调度方式(决策矩阵)
夜间窗优先本地 SSD;七乘二十四必须配水位探针与暂停入队,见上链水位文。
| 场景 | TMPDIR 建议 | 调度工具 | 关键参数 |
|---|---|---|---|
| 仅夜间批处理 | 独立挂载点如 /Volumes/Scratch/tmp | launchd | StartCalendarInterval Hour Minute;ThrottleInterval 防重叠 |
| 七乘二十四队列 | 同上并每日子目录 | GNU parallel 或自建队列 | parallel -j N --delay 2s;或 Redis 消费间隔 |
| 人机混用白天 | 内存盘可选短中间件 | cron 窄窗 | nice -n 10 与单路限并发 |
落地六步(含 ffmpeg 与退避)
- 导出环境:
export TMPDIR=/Volumes/Scratch/tmp/transcode,目录预先mkdir -p并设清理周期。 - 算并发预算:路数 N 乘每路线程 T 建议不超过物理核的九成;示例单路
ffmpeg -threads 2,M4 性能核八枚时先试 N 等于三。 - launchd plist:ProgramArguments 指向包装脚本;
StartCalendarInterval设凌晨一至五时;RunAtLoadfalse 避免登录即跑。 - parallel 片段:
parallel -j 2 --delay 5 --joblog log.tsv喂入待转列表,失败行写入重试队列。 - 退避包装:失败时 sleep 为 min( cap, base 乘 二 的 attempt 次方 ) 秒,cap 取三百至九百,attempt 最大五;成功归零。
- 磁盘钩子:
df -g解析可用百分比,低于阈值则exit 0跳过入队并写日志,阈值对齐水位清单。
plist 调度键示例(按需合并到完整 plist)
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key><integer>2</integer>
<key>Minute</key><integer>0</integer>
</dict>
<key>ThrottleInterval</key><integer>300</integer>
可引用阈值(便于评审截图)
- 并行乘积:N 路乘 T 线程小于等于零点九乘物理核数作为初值,热节流再降 N。
- 退避:base 八秒、cap 六百秒、最多五次尝试;超过进死信目录人工看源。
- 水位:可用空间百分之十五暂停新任务、百分之十仅收尾;与时段调度矩阵一起评审窗宽。
FAQ
- 临时文件可以放在网络盘吗?
- 不建议。网络抖动会拖垮 mux 与 seek;优先本地 SSD 独立目录并设 TMPDIR,输出再 rsync。
- 并行开多少路 ffmpeg 合适?
- 先以物理性能核数为上限,每路线程取一至二,留一成给系统;观测压力与热后再用队列工具限并发。
- launchd 与 shell 循环队列怎么选?
- 单窗夜间批处理可用 launchd 拉起包装脚本;多机或需公平调度时用 Redis 队列或 GNU parallel 的 jobslot。
- 磁盘水位到多少要停编?
- 可用空间低于百分之十五暂停入队,低于百分之十只跑当前任务并清理缓存,细节见 APFS 水位文。