八月我在笔记里写过一句很顺口的话:官方团队用自家模型做一部 5 分钟短片,195 次生成只剪出 46 个镜头,命中率 23%,平均四抽一。
这周我把成片按每秒 4 帧切开,一共 1231 帧,逐帧去那 195 条生成里找出处。同一批公开数据,算出来是 1.45 抽一。
差了快三倍。两个错都是我自己的,一个出在分母,一个出在分子。所以这篇想回答一个很具体的问题:别人(或者你自己)甩出一个「AI 视频 N 抽一」的数字,怎么判断它靠不靠谱?
想直接拿判据的看第 4 章和第 7 章;想看我错在哪,第 2、3 章。
1. 素材:一部短片,连同它的全部生成记录
八月有一家 AI 视频公司发了一部 5 分 8 秒的科幻短片,说所有提示词和素材都公开。网页上其实点不开,但项目页的前端会去请求一个不用登录的 JSON 接口,那里面是全量记录:每一次生成的提示词、参考图、时长、分辨率、模型名、创建时间,还有输出视频的直链。
我当时拉下来一共 195 条「生成任务」(平台叫 job set,一次提交算一条)。提示词中位数 6914 个字符,最长的两万多字,很卷。
这周我把所有输出视频也下了下来,197 个文件,2.4 GB,一个坏的都没有。成片本身也下了 1080p 版本,307.8 秒。
手上东西齐了:成品,加上理论上做出这个成品的全部原料。
2. 第一个错:分母里混进了成片发布之后才生成的东西
195 条记录分在两个文件夹里,105 条在主文件夹,90 条在一个叫「regenerations」的子文件夹。八月我直接把两边加起来当分母。
这周看了一眼时间戳,当场就不对了:
| 条数 | 创建时间(UTC) | 模型 | 分辨率 | |
|---|---|---|---|---|
| 主文件夹 | 105 条,共 107 次输出 | 6 月 26 日 – 6 月 29 日 | 2.0 版 | 4K 98 条,1080p 7 条 |
| regenerations | 90 条 | 8 月 11 日 16:16 – 16:50 | 新版 | 全部 720p |
成片的发布记录创建于 8 月 11 日 12:00 UTC,官方推文是同一天 13:50(推特的帖子 ID 里编码了时间,右移 22 位就能算出来)。
那 90 条 regenerations 是成片发出去四个小时之后,34 分钟里批量跑完的。90 条里有 89 条提示词和主文件夹里的某一条逐字相同,元数据里有个字段名直接叫「新版模型对比」。说白了,这是拿旧提示词在新模型上重跑一遍做对照,跟做片子没关系。
时间戳是直接证据:发布之后才生成的东西,不可能出现在发布的片子里。我还是拿帧匹配验了一遍(方法在第 4 章),相似度阈值 0.85 下,成片里能对上的 regenerations 片段是 0 个。
判据一:算「用了多少素材」,先把创建时间晚于成品发布时间的记录全部剔掉。 这一步没有任何技术含量,我就是没做。
剔完之后,分母从 195 变成 107。
3. 第二个错:分子数的是镜头,分母数的是生成
八月那个「46 个镜头」,是我拿镜头检测工具在成片上切出来的。问题是一次生成不等于一个镜头。
我在 105 条主提示词里搜 HARD CUT:26 条里有,加起来写了 95 处。比如这种:
1.6s HARD CUT 1.6s–3.4s ... 3.4s HARD CUT 3.4s–5.8s
也就是在一条 10 秒的生成里,用文字排好四五个镜头,让模型一口气画出来。我抽了 6 条这样的输出去检测(场景阈值 0.3):提示词里写了 3 到 7 处硬切的,画面里实际检测到 2 到 4 处;另外抽了 5 条写明「单镜头不许切」的,检测到 0 处。模型基本是听话的。
所以成片里的一个镜头,可能只是某条生成里的一小段;同一条生成也可能贡献好几个镜头。拿镜头数除生成数,单位根本对不上。
更糟的是「46」这个数本身也不稳。我用 ffmpeg 的场景检测在成片上换几个阈值重跑(间隔不到 0.5 秒的切点合并成一个):
| 场景变化阈值 | 0.25 | 0.3 | 0.4 | 0.5 |
|---|---|---|---|---|
| 切出的镜头数 | 115 | 93 | 45 | 23 |
| 镜头中位时长(秒) | 2.0 | 2.33 | 4.08 | 6.71 |
同一部片子,镜头数可以是 23,也可以是 115,看你把旋钮拧到哪。八月我拿到的 46 恰好落在 0.4 附近,然后我就把它当事实写下来了。当时那句「中位镜头 3.9 秒,97% 不超过 5.2 秒」我这次也没能复现出来,具体用的哪个工具、什么参数,笔记里没记。这条只能作废。
判据二:看到「N 个镜头」,先问是什么工具、什么阈值切的。 不报阈值的镜头数,可以差五倍。
4. 换个尺子:每一帧直接去找它的出处
既然数镜头不靠谱,那就别数了,直接问每一帧画面是从哪条生成里来的。
做法很土:
- 成片和 197 个输出视频都按每秒 4 帧抽帧,缩成 64×27 的灰度小图,减去均值再归一化
- 成片的每一帧和所有输出帧算相关系数,取最高的那个
- 相关系数超过 0.85,就认为这一帧出自那条生成
- 同一条生成连续命中至少 2 帧(0.5 秒),才算这条生成「上了成片」
成片 1231 帧,第 1 步到第 4 步跑完,787 帧能对上主文件夹里的某条生成,拼成 95 段。107 次输出里,74 次在成片里出现过。
于是:
抽卡比(下限)= 成品发布前的生成次数 ÷ 成品里实际出现过的生成次数
= 107 ÷ 74 ≈ 1.45
我八月的算法 = 全部记录数 ÷ 镜头检测数 = 195 ÷ 46 ≈ 4.24
两个错可以分开看。只修分母,195 ÷ 46 变成 107 ÷ 46 ≈ 2.33;再修分子,才到 107 ÷ 74 ≈ 1.45。分母那 88 条的差是这样来的:踢掉 90 条 regenerations,主文件夹的 105 条记录实际有 107 次输出。
阈值 0.85 是我拍的,所以我把它也拧了一遍(这里先不加 0.5 秒的连续性过滤):
| 相关系数阈值 | 0.8 | 0.85 | 0.9 | 0.95 |
|---|---|---|---|---|
| 能对上的成片帧占比 | 69.9% | 63.9% | 51.3% | 29.2% |
| 出现过的不同生成数 | 95(含 2 条 regenerations) | 88 | 70 | 44 |
0.8 的时候开始混进 regenerations,而它们按时间根本不可能在片子里,说明 0.8 已经在放假阳性进来了。0.95 又太严,调色和裁切稍微动一下就掉。0.85 是我能找到的、既不放进不可能的东西、又不丢太多的点。就算拧到最严的 0.95,抽卡比也是 107 ÷ 44 ≈ 2.4,还是到不了四。
5. 真正贵的是秒数
抽卡比 1.45 听起来像「AI 视频很省」。别急,看秒数。
74 条上了成片的生成,每条平均只有一小部分画面被用上:每条用掉的比例中位数是 19.4%。上了成片的生成里,四分之一只被用掉不到 8.8%。
秒数利用率 = 成片里能追溯到生成的秒数 ÷ 发布前生成的总秒数
= 188.5 ÷ 1048 ≈ 18%
翻过来说,每 1 秒成片背后大约是 5.6 秒的素材。成片里能溯源的片段,中位时长只有 1.5 秒,94.7% 不超过 5 秒,最长的一段 8 秒。
这一节反过来解释了为什么抽卡比这么低:他们几乎每条都要,但每条只要最好的那一两秒。提示词里那些逐秒写好的动作时间轴,大概就是为了让「最好的那一两秒」落在可预期的位置上。
如果你在给一个 AI 短片做预算,按「次数」算会严重低估,按「秒数」算才对得上账:平台大多按生成秒数计费,你要的成片时长乘上 5 到 6,才是你要买的秒数。这个倍数是从这一部片子来的,换个类型、换个团队肯定会变,但量级比「四抽一」有用得多。
6. 这套方法漏了什么
这几处补上之前,上面的数字只能当下限看:
- 36% 的成片帧找不到出处。 1231 帧里 444 帧对不上。最长的两段空白都在第 192 到 225 秒之间,合计 28 秒。我试了中心裁切 70% 和水平翻转两种补救,只多找回 31 帧和 22 帧,说明大部分不是简单的二次构图。可能是重度后期,也可能是不在这个公开文件夹里的生成。
- 公开的文件夹叫「snapshot」。 名字暗示它是整理过的快照,失败的生成可能早就删了。所以 107 是发布前生成次数的下限,1.45 也是抽卡比的下限,真实值只会更高。我没法从公开数据里知道高多少。
- 相关系数是很粗的尺子。 64×27 的灰度图分不清两个构图相似的镜头。同一个提示词跑多次的那几组(93 个不同提示词对应 107 次输出),我分不清成片用的是哪一次。
- 每秒 4 帧会漏掉短于半秒的闪切。 我的 0.5 秒连续性门槛也会把它们过滤掉。
- 八月那组镜头统计没留工具和参数。 3.9 秒、97% 这两个数我复现不了,已经作废。
7. 下次看到「AI 视频 N 抽一」,按这个顺序问
- 分母里的每一条,创建时间都早于成品发布吗? 不早于的全部剔掉。事后的对照重跑、补拍、宣传素材,常常和正片放在一起。
- 分子数的是镜头还是生成? 提示词里写多镜头的话,一次生成能产出好几个镜头,两边单位要对齐。
- 镜头数是什么工具、什么阈值切的? 不报阈值的镜头数,同一部片子能在 23 到 115 之间随便取。
- 有原始输出的话,直接逐帧对回出处。 缩成小灰度图算相关系数就够用;阈值拧一圈,看在哪开始混进时间上不可能的素材。
- 最后换算成秒数。 成片秒数 ÷ 生成秒数,才是你买单时真正面对的比例。这部片子是 18%。
八月那句「四抽一」我写得很顺手。推翻它的第一步只是看一眼时间戳,我拖了两个半月。