一条视频的 B-roll 怎么决定
最终原则:画面必须能给文稿提供证据。宁可不用 B-roll,也不拿“差不多”的镜头硬配。系统严格按 方案1 → 方案2 → 方案3 → 主播讲述镜头递进;任何一级失败都不能拖垮整条视频。
一眼看懂:四级递进关系
方案 1
现有审核素材命中
把每句文稿翻成“画面需求”,先在当前已审核、已标注、可直接取用的 B-roll 库里找。
命中就使用→
方案 2
授权来源持续补库
收割机持续采集授权来源,切镜、清洗、标注、审核后补进同一素材库,让以后更多画面需求能命中。
补充方案1的库存→
方案 3
原素材参考生成
前两层仍没有合适镜头时,只补一个最关键缺口;参考图和动作都来自当前任务的原素材视频。
单格 H3 ref2v→
最终兜底
主播讲述镜头
方案3没生成成、参考不干净或预算不足,直接回主播镜头,整条视频继续完成。
稳定优先重要口径:方案2不是让每条视频停在现场等待下载十条素材。它是后台供应链:持续把授权来源变成合格库存;生产任务读取最新库存匹配。方案1与方案2在生产端共同形成“先用真实素材”的前两层,仍未命中才调用方案3。
进入三个方案前,系统先做什么
- 文稿切句:配音被拆成有明确起止时间的字幕格。
- 句子对回正文:每条字幕必须确定来自哪一段正文,不能用上一句话的画面需求。
- 生成画面需求:正文为每句提供可见的画面意图,例如“工人给柜门安装铰链”,而不是只拿整句文案模糊搜索。
- 固定主播区:开头前两格和结尾一格强制主播讲述,不进入缺口,也不调用生成。
- 逐句留证:最终写出“文稿、画面意图、实际画面、匹配分、命中理由”的逐句对照表,审片时可定位。
方案1:现有审核素材匹配
输入
当前句子的画面需求、该字幕格需要的时长,以及当前任务已经用过的素材段和源片。
输出
一段已审核 B-roll、对应 R2 文件、匹配分和“为什么对得上”的证据。
作用
优先复用真实画面,不增加生成费用;同时尽量减少主播口型生成秒数。
先过安全闸,再谈匹配
| 硬条件 | 当前生产要求 | 挡住什么风险 |
|---|---|---|
| 已审核 | approved = 1 | 未审、模糊、隐私或判断不明的片段 |
| 没有人脸 | has_face = 0 | 别人的脸进入客户成片 |
| 字幕干净 | 无字,或已有通过验证的干净版本 | 原字幕和新字幕叠在一起 |
| 没有品牌/水印标记 | has_brand = 0 且 has_watermark = 0 | 账号、门店或平台身份混入 |
| 文件真实可取 | 必须存在 R2 文件;下载后再验视频轨 | 数据库说“有”,实际文件坏了或打不开 |
怎么判断“画面与文稿对得上”
- 至少命中 4 个有效字:短查询则要求整句命中,防止只碰到一个词就强配。
- 泛词不算证据:在超过 25% 素材里都出现的词会被自动视为泛词,例如仅命中“墙面”不能说明对题。
- 工序必须一致:柜体安装不能配成瓷砖美缝;能识别工序时,跨工序候选直接排除。
- 动作必须一致:讲“安装铰链”不能只因画面里有柜体就通过,候选动作也要命中。
- 工序不明时更严格:无法判断工序的句子,至少要覆盖一半有效文字。
- 同一源片不重复:一条成片内既不重复同一段,也不重复同一条来源视频,避免视觉上像循环播放。
命中
下载该素材段 → 验证视频轨 → 按字幕格时长裁切/轻微变速 → 精确对齐帧数 → 进入成片。
没命中
登记为
broll_gap,不拿低分第一名硬凑,继续看方案2已有补库成果;仍无合适库存才进入方案3。方案2:授权来源采集、清洗和补库
输入
明确授权的来源队列,以及方案1长期记录的素材缺口类型。
产物
切分后的候选镜头、视觉语义标注、审核状态、可检索片段和 R2 文件。
作用
用真实行业画面扩大方案1的命中面,减少未来任务进入付费生成或退回主播的次数。
后台补库流水线
授权来源入队
→ 下载原视频
→ 镜头切分
→ 字幕 / 人脸 / 品牌 / 水印检测
→ 视觉内容精细标注(主体、动作、物件、场景、事实、工序)
→ 安全与质量审核
→ 合格段上传 R2
→ 更新 broll.db 快照
→ 新视频生产时由方案1检索使用
授权是前置条件:采集上限不是成功数量承诺。没有明确授权的来源不会为了凑数强行进入队列;采下来但没过安全或语义闸的镜头也不会进入可用池。
2026-08-26 首轮实际结果
5 / 5
授权队列实际可用 5 个来源,全部处理状态为 ok
28
切出的候选镜头
3
通过 B-roll 可用闸并进入可检索池
本轮任务参数上限为 10,但授权队列当时只有 5 个;另有 4 个镜头被识别为主播讲述类,保留为 A-roll,不冒充 B-roll。这里展示真实产物,不把“上限 10”写成“成功 10”。
夜间自动采集:已配置为每天北京时间 02:00启动一轮,固定
feed_limit=10、source_limit=10。它只唤醒已经部署好的 Fly 收割机,不会每晚重新部署;上一轮仍在运行就安全跳过,授权队列为空则快速收工,完成后机器自动停机。GitHub 定时任务在高峰期可能延迟,所以“02:00”是计划触发时间,不承诺秒级准点。补库后命中
后续视频按方案1同样的安全闸和语义闸使用该真实素材。
当前仍没货
当前视频不等待后台无限采集,进入方案3;缺口继续保留,供后续定向补库。
方案3:用当前原素材做 H3 参考生成
触发条件
当前视频存在真实 B-roll 缺口,并且方案1/2库存都没有合格匹配。
生成形式
MiniMax H3 ref2v,5 秒、768P;不是纯文生视频。
数量限制
整条视频最多生成 1 格,只补最前面的关键缺口。
参考素材怎么来
- 从任务书锁定的 当前视频原素材链接下载原视频;不使用主播底片,也不随机找网上素材。
- 从原素材中间位置截取一段 5 秒动作参考。
- 检测字幕带;若有字幕则裁掉底部字幕区域并补齐画布。
- 清洗后再次实测。仍检测到文字就停止方案3,不能仅凭“已经处理过”宣称干净。
- 从同一段干净动作视频的 20%、40%、60%、80% 位置抽取 4 张参考帧。
- 参考帧和动作视频临时放入私有对象存储,连同当前缺口的画面需求提交 H3
ref2v。 - 生成 5 秒结果后,只裁取当前字幕格所需时长,并按帧数严丝合缝地放回时间轴。
预算和防重复调用
| 项目 | 生产限制 | 作用 |
|---|---|---|
| 单次 H3 | 5 秒 × $0.225/秒 ≈ $1.125 | 调用前确认至少有这笔剩余预算 |
| 整单 H3 上限 | $5 | 与口型费用合并核算,不能逐格合法、整单失控 |
| 生成格数 | 最多 1 格 | 避免多格独立生成造成空间、人设和光线不连续 |
| 幂等绑定 | 提示词 + 参考帧 + 动作视频生成唯一摘要 | 同样输入重跑时复用已付费结果,避免重复扣费 |
生成成功
该字幕格记为 B-roll,并明确证据来源是“原素材参考生成”,不是素材库命中。
任一步失败
包括下载失败、时长测量失败、字幕清洗未通过、抽帧失败、上传失败、生成失败或预算不足:全部关闭方案3,回主播讲述镜头。
三个方案怎么产生费用
成本不是三个方案各收一遍:每个字幕格只走到第一个成功出口。方案1/2命中就不调用方案3;方案3也失败才回主播。整条视频的画面账由“主播口型秒数 + 方案3生成格数”共同决定,方案2则是独立的后台补库成本。
| 方案 | 什么时候产生费用 | 当前可证明的单价/上限 | 成本控制 |
|---|---|---|---|
| 方案1 库存匹配 | 读取本地 SQLite、做确定性检索、从 R2 下载已有片段。没有付费模型调用。 | 单次匹配边际 API 成本 $0。R2 下载出流量免费;存储属于素材库公共底座。 | 命中 B-roll 的秒数无需做主播口型,按当前口型价还会少花约 $0.0833/秒。 |
| 方案2 夜间补库 | 收割机运行时产生 Fly CPU/RAM 机时;视觉标注调用 OpenRouter;新镜头占用 R2/Fly 卷存储。 | 视觉模型代码估算约 $0.0005/张,但一条源片会拆成多少镜头、是否重试不固定。20GB Fly 卷约 $3/月;机器停机后 CPU/RAM 归零。 | 每天最多喂10条、收10条;只收明确授权来源;已有 md5 与收件箱对象去重;跑完自停;上一轮未结束不并发。 |
| 方案3 H3 ref2v | 只有前两层未命中且所有参考、预算闸通过时,才调用一次付费视频生成。 | 5秒 × $0.225/秒 = $1.125;整条最多1格,H3整单硬上限 $5。 | 提示词+参考绑定幂等,同输入重跑复用已付结果;与主播口型费用合并预算,预算不足不调用。 |
| 主播兜底 | 该字幕格回主播后,需要为这段主播画面做口型同步。 | 当前口型价格 $5/分钟,即约 $0.0833/秒。 | 仍受整单剩余预算限制;B-roll 分支失败不会重复收取方案3费用。 |
一格画面的成本例子
- 方案1/2命中一格 4 秒 B-roll:素材匹配本身边际 API 成本 $0,并少做 4 秒主播口型,约少花 $0.33。
- 方案3补一格 4 秒:H3 固定生成 5 秒、支付 $1.125,再裁成4秒使用;同时少做4秒主播口型,和全主播相比净增加约 $0.79。
- 全部失败回主播4秒:不产生 H3 费用,只产生约 $0.33 的主播口型费用。
方案2目前不能给出“每晚固定多少钱”:源片时长、切出的镜头数、视觉调用次数和重试次数都会变化。代码中的单图估算、机器规格和存储价可以证明,但首轮没有留下独立的 OpenRouter 余额差值账,因此本页不把估算冒充实付。夜间轮次会继续产出 fed / harvested / clips / 状态证据;要得到可靠的单条实付,还需接入按轮 OpenRouter 差值和 Fly 账单归因。
最终兜底:不用 B-roll,回主播讲述
以下情况都不会让整条视频失败,而是只让对应字幕格使用主播讲述镜头:
- 素材库不存在、暂时没同步好或为空;
- 有候选,但安全闸、工序闸、动作闸或有效文字覆盖不合格;
- 选中的远端素材损坏,替补也找不到;
- 当前原素材无法下载、没有干净动作段或参考帧;
- 方案3预算不足或 H3 调用未完成。
这不是“少做了一步”,而是产品策略:主播镜头至少保证“人说什么,画面就是这个人在说”;错误 B-roll 会直接给观众提供相反证据,所以宁可退主播,也不允许硬配。
一格画面的完整决策伪代码
如果是开头前两格或结尾一格:
使用主播讲述镜头
否则:
从已审核素材库检索(方案1;库存由方案2持续补充)
如果通过安全闸 + 工序闸 + 动作闸 + 语义覆盖:
使用真实 B-roll,并记录匹配证据
否则:
登记素材缺口
如果本条还没用过方案3,且预算足够,且当前原素材能产出干净参考:
用原素材的 4 张参考帧 + 5 秒动作段执行 H3 ref2v
成功则只补这一格
失败则使用主播讲述镜头
否则:
使用主播讲述镜头
怎么验证这次修复真的有效
| 要看什么 | 通过标准 | 不能误判成通过 |
|---|---|---|
| 文稿与画面 | 逐句看,画面主体、动作、位置和文稿一致 | 只因“都是装修画面”就算匹配 |
| 递进关系 | 有真实素材优先;没有才生成;生成失败回主播 | 方案3无缺口也启动,或绕过方案2 |
| 方案3参考 | 参考图和动作都能追溯到当前任务原素材 | 拿主播底片或不明来源素材充当参考 |
| 稳定性 | 任何 B-roll 分支失败,整条视频仍能完成 | 配置写对但真实任务中断 |
| 时间轴 | 所有窗口帧数加总等于配音应有帧数 | 容器总时长看似正确,但中途音画漂移 |
| 成本 | H3 最多 1 格,且和口型费用一起受整单预算限制 | 每格分别未超预算,但全片累计失控 |
系统会为每条视频产出 visual-alignment.json:逐句列出文稿、预期画面、实际使用主播或 B-roll、匹配分和证据。新视频验收时,应把这张表与最终成片一起看,才能判断问题是文稿、素材、匹配还是生成。
为什么采用这个设计
- 历史错误1:只命中“激光”“接缝”一两个词,就把量房配成铺砖、把台面收口配成美缝。现在改成有效字覆盖 + 工序 + 动作三道闸。
- 历史错误2:一次独立生成 7 个镜头,约花 $12,并出现 7 个互不一致的空间。现在方案3最多 1 格、整单封顶。
- 历史错误3:配置或脚本显示“已清洗”不代表画面真的没字。现在清洗后必须再次检测,没验成就停用方案3。
- 历史原则:稳定的 70 分比偶发 95 分更重要,所以 B-roll 是可选增强,不是整条视频的单点故障。
当前上线状态
d660840
生产版本短 SHA
4317
回归测试通过数量
正常
生产探针、任务队列与三级降级链
上线证明表示代码、测试、部署和探针均成立;“销售反馈的画面与文稿不对应是否在真实成片中解决”,仍以新视频逐句验收为最终判据。
Akke 视频生产说明 · 生成于 2026-08-26 · 本页为公开链接,不包含密钥、客户隐私或内部操作凭据。