#OpenClaw #qBittorrent #字幕 #媒体自动化 #最小权限

相关:《OpenClaw 微信安全下载体系》 · 《高权限 NAS Skill 静态审计》 · 《OpenClaw 后续功能规划》

下载完成不等于媒体已经适合进入媒体库。真正麻烦的是后半段:验证音轨和字幕、匹配字幕版本、生成不破坏原件的成品、规范命名、保留来源关系,以及识别重复文件。

这次没有接入第三方 NAS Skill 的预编译二进制、私有 API 或 session。它有价值的部分不是“能执行很多命令”,而是先观察、形成计划、绑定对象、返回结构化结果。实际实现全部使用 N100 上可审计的本地 Python 与固定 ffmpeg/ffprobe。

处理链

qBittorrent 完成对象先经过只读观察器。观察器只接受固定分类和下载根目录,并把 infohash、文件清单、字节数和媒体探测结果写入报告。

后续处理遵循四条硬规则:

  1. 只有本地确认过的作品别名才能自动生成媒体库名称;未知标题进入人工审核。

  2. 原件始终只读,成品只能写入固定的 OpenClaw-Processed。目标已存在就拒绝,不覆盖。

  3. ffmpeg 只做 stream copy。先写 .partial,再用 ffprobe 验证时长、唯一默认音轨和中文字幕,最后原子发布。

  4. 每次发布记录 lineage receipt,包含 torrent、策略版本、原件与成品的大小和 SHA-256,以及字幕证据。

字幕获取不是“开放一个下载器”

无凭据的字幕入口只接受固定 HTTPS 域名,拒绝账号、URL 内凭据、重定向、非 443、私网 DNS、路径穿越、嵌套压缩包和超限载荷。字幕文件还必须通过 cue 数量、时间轴覆盖和文件名 token 的唯一高置信匹配;并列、时间轴过短或超出片长都会停止。

需要账号或 API key 的服务暂不接入。这样牺牲了来源覆盖率,但避免把凭据和一个通用网络下载能力一起交给 Agent。

容器边界

  • 观察器只有媒体只读挂载与 qB 管理网络。

  • processor 是原件只读、成品读写、无网络。

  • subtitle fetcher 没有媒体挂载,只有字幕状态目录和固定公网出口。

  • duplicate scanner 只读成品库、无网络,结果明确不提供删除能力。

重复识别先按大小分组,再计算完整 SHA-256;报告只保存路径的哈希 ID。它回答“哪些文件内容相同”,不会自行选择保留项或删除文件。

验收结果

本地 42 项自动测试与静态安全门全部通过,覆盖目标冲突、空间不足和 lineage 写入失败后的清理。N100 上的真实合成媒体测试完成了一次 ffmpeg stream-copy:非日语唯一默认音轨被正确保留,中文字幕成为唯一默认字幕,原件 SHA 前后一致,lineage 成功写入且没有 .partial 残留。

生产启用后没有重处理旧对象;只读扫描了 39 个成品媒体文件,未发现完整重复。OpenClaw、qBittorrent 和下载执行器均未重启,近 15 分钟内核存储错误为零。

当前仍不允许未知标题自动发布、低置信字幕内封、OCR/ASR、重编码、重复文件自动删除,以及任何原件移动、改名、覆盖或删除。这些能力不是实现不了,而是需要各自独立的质量门和权限边界。