相机素材管家 · Camera Media Keeper
SkillDev tools将相机或存储卡素材完整迁移到 SSD,诊断 USB 限速,保留整卡目录,支持断点续传、SHA-256 回读校验、素材抽查和授权清卡。用于相机转存、Sony 备份、换线续传及备份后清卡;目前支持 macOS 挂载卷。
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the 相机素材管家 · Camera Media Keeper skill
What this skill tells your AI
The instructions your AI receives, as published by lovstudio/skills in skills/migrate-camera-media/SKILL.md and read by ahel’s review.
版本:0.1.0。按“查设备 → 查链路 → 整卡复制 → 全量核验 → 素材抽查 → 按授权清卡”执行。使用现有会话中的源路径、目标路径、风险选择和授权;不要反复询问已确认的事项。
Triggers
Activate when
- 将相机或存储卡里的素材转存到 SSD,并校验是否完整。
- 排查 Sony 传输过慢、换线后续传或备份完成后的清卡流程。
Do not activate when
- 只需要视频剪辑、字幕、照片调色或损坏录像恢复;本 Skill 不负责这些结果。
- 设备未挂载为 macOS 文件系统卷时,先解决连接方式,不直接执行迁移脚本。
先界定结果与授权
- 回答“怎么做、能不能”时先解释和只读检查。明确的迁移请求执行复制与校验;跨盘移动同样需要复制,不提供速度优势。
- 默认保留源卡。只有上下文已明确授权删除这张卡时,才进入清卡步骤;单独一句技术可行性问句不足以替代删除授权。已有明确授权无需再次确认。
- 把 3-2-1、多份独立备份及未恢复素材作为建议和状态说明。用户已了解并接受当前备份安排后,不反复以同一建议阻止已授权清卡。
- 不继承此 Skill 的真实案例授权。每次确认实际目标;不自动格式化、抹整盘、删除其他卡或清理备份。
1. 只读检查与测速
先读取源卷及目标卷身份、格式、可用空间。将每张卡归档到独立目录,将清单与日志放在相邻报告目录,二者均在源卡之外。
python3 scripts/camera_media.py inspect --source '/Volumes/CAMERA_CARD' --usb
diskutil info -plist '/Volumes/ARCHIVE_SSD'
从实际输出取得 Volume UUID,不能把可变的 disk4 等设备编号当永久身份。统计所有文件的逻辑字节数,包含隐藏文件、空目录、XML、数据库、代理文件及 RSV;分开统计主照片和视频缩略图。不要读取或归档相机额外挂载的软件安装卷,例如 PMHOME。
在大量复制前核对协商速率。若实际读速约 1 MB/s,优先查 UsbLinkSpeed;12 Mb/s 的理论上限仅 1.5 MB/s。先排除线、接口和读卡器限制,不能直接用 SSD 宣传速度估算。请求换线前安全停止当前进程并确认退出,保留部分文件;重新连接后复核 UUID 和清单。
Sony FX3A 与 macOS/exFAT 的细节按需读取 平台与速度。其他相机能力须查其官方文档,不从 FX3A 推广。
2. 复制并全量校验
使用 Python 3.9+;转存脚本需要 xattr 模块。先用 python3 -c 'import xattr' 检查可用运行环境,复用已安装环境。缺依赖先解决,不要启动百 GB 复制后才发现接口不可用。
以下路径及 UUID 均为占位示例,替换为刚读取的实际值。目标卡目录和报告目录应尚不存在;断点续传时复用同一组参数。
caffeinate -i -m python3 scripts/camera_media.py transfer \
--source '/Volumes/CAMERA_CARD' \
--destination '/Volumes/ARCHIVE_SSD/活动/原始素材/相机-卡01' \
--report '/Volumes/ARCHIVE_SSD/活动/转存校验/相机-卡01' \
--source-uuid 'SOURCE_UUID' --destination-uuid 'DESTINATION_UUID'
让脚本顺序读卡,并行写 SSD 和计算 SHA-256,采用有限内存缓冲。它保留 .partial,恢复时逐字节比较已复制前缀,并重算源哈希状态;不会盲目追加。保留文件名、目录、时间戳和扩展属性;不把相机的保护标志复制到工作副本。
完成复制后,重新打开目标文件回读计算哈希,验证所有源文件路径、大小、哈希及目录集合。保存 manifest.json、checksums.sha256、status.json。校验成功状态是 verified;遇到异常保留错误和中间产物,不显示完成。
verify 子命令接受同一组五个路径/身份参数,可在源卡尚存时重新核验。已清卡后不要运行依赖源快照的验证;使用归档清单从目标卡目录执行 shasum -a 256 -c '/绝对路径/checksums.sha256' 检查备份本身。
3. 处理断连与源清单变化
使用 inspect --source ... --compare '/报告目录/manifest.json' 检查新增、缺少和变更文件。失败时不要删锁、关闭校验或直接覆写旧清单。
- 源未变化:使用相同参数续传;已有完整文件先校验,部分文件先核对前缀。
- 源变化:保留旧清单、旧报告和未完成副本,输出差异。只询问影响结果的问题,例如“这些片段是否另行转移”。用新的卡目录和报告目录备份当前内容,不把较小的新快照说成原始整卡已全部备份。
- 用户提供另一目的地:核对具体文件及 XML、原始大小,抽查可播放性。有旧源哈希时比对哈希;没有时只能报告“数量/大小一致、抽查通过”,不能声称逐字节一致。记录已确认的去向和验证范围。
不要因新快照变化推断数据已损坏或被用户删除。不要擅自进行数据恢复。
4. 素材抽查与交付
安装环境中存在 Pillow、ffmpeg、ffprobe 时运行:
python3 scripts/check_media.py --report '/Volumes/ARCHIVE_SSD/活动/转存校验/相机-卡01'
只选择清单中的真实文件,避免把 macOS 的 ._*.MP4、._*.JPG 当素材。解码照片全部 MPO 帧;对每个受支持视频检查首、中、尾画面和一段音轨。记录不支持的格式及未尝试恢复的 RSV。抽样解码不是全片逐帧验证,也不是人工视听审查;哈希一致不证明源录像本来可播放。
按宿主机制等待长任务,至少每 60 秒提供有意义的进度。分开报告复制速度、校验速度和完成状态。最终回读清单和结果,简要交付:路径、文件数、字节数、耗时、核验范围、异常去向、RSV 状态、源卡是否保留、第二份备份是否存在。按宿主要求将用户可见报告复制到交付目录。
5. 经授权清卡
先读取 清卡规则。优先推荐相机内格式化。用户明确选择电脑端清空并已接受备份安排时,可以执行电脑端清理;把厂商建议说明一次,不当作不能执行的权限限制。
使用 cleanup 和转存相同的五个参数先生成只读计划;默认不会删除。确认计划中的卡 UUID、源文件、已验证副本、受保护文件及拟释放字节。
授权已明确且计划符合范围后,追加 --apply --confirm-source-uuid 'SOURCE_UUID' 执行。此参数只是防误触开关,不提供用户授权。脚本仅删除原清单中仍未变化且备份匹配的文件,跳过受保护文件,不清除 uchg,不 sudo,不改分区或文件系统。
清理后读取 cleanup.json、剩余文件及实际可用空间,更新报告中的源卡状态。cleared_with_retained_files 不等于完全空卡;逐项说明保留内容和大小。相机仍可能需要机内格式化来初始化数据库。
维护
脚本变更后运行 PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -v。测试只使用临时目录和注入的卷身份,禁止用真实卡测试删除逻辑。实战中的发现与证据边界见 案例。
Signals
- GitHub stars
- 66
- Forks
- 17
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
lov-migrate-camera-media- Source
- github.com/lovstudio/skills