极客豌豆 · 本地练习资源 · R1 / 2026-10-14

收到的素材,是否与发出时一致?

为两份目录生成相对路径清单,再核对缺失、额外、同名内容变化与可能重命名。所有样本均为程序自制的虚构练习;不含客户数据、第三方视频或音乐。

文件核对只是交接的一步。摘要一致不等于文件可播放、版权已获授权、素材齐全满足创意需求,也不等于 Premiere 等剪辑工程可重开。本包没有剪辑工程。

1. 先看一个有意制造的差异

样本各有一个 4 秒、640×360 的几何画面视频,以及 4 秒低音量合成音频。两份音频字节数相同,但频率分别为 440 Hz 与 660 Hz,用来展示“文件大小相同,内容仍可不同”。播放前请调低音量。

自制静态几何画面;无拍摄素材、无字幕烧录、无音轨。

基线音频 · 440 Hz

同名内容变化样例 · 660 Hz

本地 FFmpeg 8.1.2 对这些媒体解码成功;这是该解码器的检查结果,不能代替你的目标播放器、剪辑软件或其他设备实测。

2. 两条命令做一次练习

本工具使用 Python 标准库。需要 Python 3.9 或以上;本次仅在 macOS 实跑。代码使用 macOS / Linux 的安全文件读取能力,但未在 Linux 实测,不支持 Windows。本包没有自动安装程序。

  1. 把 ZIP 解压到普通本地目录。打开终端,输入 cd (后有空格),将解压目录拖入终端,按回车。这里应能看到 file_manifest.py 和本指南。
  2. 先停止样本目录的编辑、同步和复制,运行下面第一条命令。结果文件保存在包目录,位于被扫描的 samples/02-same 之外。
  3. 运行第二条命令,与包内基线清单比较。
(set -C; python3 file_manifest.py manifest samples/02-same > received-new.json)
python3 file_manifest.py compare expected/01-baseline.manifest.json received-new.json

set -C 只作用于这个括号内的子 shell,避免覆盖已经存在的结果文件。再次练习时改用新的输出名称;不要用 > 指向原素材或已存在的重要文件。工具只输出到终端,保存文件的是 shell 重定向。

成功时会看到 complete: true 和 same_inventory: true。也可以直接查看 本包的相同目录预期结果。其余四组只需把第一条命令的 02-same 换成下表目录,并给输出清单换一个新名称。

接收目录故意制造的情况预期结果
02-same全部相同无差异;退出码 0
03-missing少了音频missing_paths 1 项
04-extra多了一份说明extra_paths 1 项
05-changed音频同路径、同大小、内容改变changed_same_path 1 项
06-renamed视频改名、字节不变missing 1 + extra 1 + possible_renames 1

最后四组退出码为 1,意思是比较完成且发现差异,不是脚本崩溃。2 表示读取或格式检查失败;不完整结果不能用于判断文件丢失。

3. 用在真实交接中

  1. 发出方先确定交接边界:哪些素材、版本、字幕、授权材料及工程应该包含;单靠目录扫描无法知道创意需求是否齐全。
  2. 停止编辑与同步,在要发送的素材目录上运行 manifest,将清单保存到目录之外。清单需与对应版本一起保存,并通过可信渠道确认来源;手动伪造的清单不能作为可信证据。
  3. 接收方下载并解压完成后,在接收目录上重新运行 manifest,使用 compare 与发出方清单核对。
  4. 先解决 missing / extra / changed,再逐项确认 possible_renames。相同摘要的新增和缺失也可能由复制产生,工具不推断真实操作历史;存在多个候选时归入 ambiguous_same_content_groups。
  5. 另做播放抽检、授权材料核对和剪辑工程重开;使用 人工检查记录 留证。

大素材默认上限为单文件 512 MiB、总量 2048 MiB、10000 个文件、20000 个目录条目、32 层递归。只有确认是你自己的目标目录、且理解读取成本后,才使用 --max-file-mib 与 --max-total-mib 提高字节上限。达到上限会整体停止,不会用“部分清单”报缺失。

4. 读取边界与限制