10.3 质量门禁


10.3 质量门禁

本节摘要:门禁是流水线的海关:每个阶段出口设卡,检查通过才放行进入下一阶段。本节先立建制——自动检查守下限(时长、分辨率、音量、黑帧四类),人工抽检守上限(好看不好看机器说了不算);四类自动检查逐一讲清检查什么、用什么量、怎样算过,并给出汇成一体的 gate_check.py,退出码即放行信号,可直接挂进第 8.1 节技能验收与第 9.3 节任务队列;随后说明门禁不是新发明,而是前九章检查的收编:字幕校验(7.2)、对齐校验(6.3)、校验和(8.3)都登记为门禁项;人工抽检点给出比例与看点的对照表;最后是质量分台账——每条片一张评分卡,趋势看板让"最近片子变水了"变成可查的数据问题。门禁失败的处理流以"定位阶段、最小重跑"收束。

学习目标

  • 说清门禁的建制逻辑:自动守下限、人工守上限、台账留痕迹。
  • 实现时长、分辨率、音量、黑帧四类自动检查并汇成统一脚本。
  • 把前九章的既有校验登记为门禁项而不是重写一遍。
  • 按阶段设计人工抽检点的比例与看点。
  • 维护质量分台账并用趋势数据驱动改进。

一、门禁的建制:位置与分工

门禁设在阶段出口而非入口:进入下一阶段前验上一阶段的产物,保证流水线里流动的东西永远是合格的。分工遵循第 8.1 节的生成与把关分离:自动检查处理一切机器可判定的(时长够不够、分辨率对不对、响度在不在带内、有没有黑帧),人工抽检处理机器判不了的(节奏是否拖沓、情绪是否到位)。自动项追求全查零遗漏,人工项按风险抽样——两者都不缺位,也不越位。

门禁在流水线上的位置(阶段出口设卡) 剧本 ─▶│卡1│─▶ 分镜 ─▶│卡2│─▶ 镜头 ─▶│卡3│─▶ 粗剪 ─▶│卡4│─▶ 成片 ─▶│卡5│─▶ 交付 结构完整 首尾帧标注 四类自动检查 时长/对齐 门禁全家桶 台词字段 时长分布 逐镜头验收 转场完整 加标识核对 ​

二、四类自动检查

时长:实测时长与计划值的偏差在容差内(成片级),单镜头不低于台词时长(镜头级,即第 6.3 节校验)。分辨率:统一目标(如竖屏一千零八十乘一千九百二十),混入横屏素材立刻暴露。音量:loudnorm 测量整片综合响度,落在目标带内(目标带以各平台现行规范为准,参照 6.2 节)。黑帧:blackdetect 检测连续暗场——生成视频常见的"黑尾"(生成时长不足时尾部补黑)与转场失误都靠它抓。

# gate_check.py —— 成片质量门禁:时长/分辨率/响度/黑帧四项自动检查 import json, re, subprocess SPEC = {"duration_s": 60.0, "dur_tol": 2.0, "width": 1080, "height": 1920, "lufs_min": -16.0, "lufs_max": -13.0} def ffprobe_streams(path): cmd = ["ffprobe", "-v", "error", "-show_entries", "format=duration:stream=width,height", "-of", "json", path] return json.loads(subprocess.run(cmd, capture_output=True, text=True).stdout) def measure_lufs(path): cmd = ["ffmpeg", "-i", path, "-af", "loudnorm=print_format=json", "-f", "null", "-"] err = subprocess.run(cmd, capture_output=True, text=True).stderr found = re.search(r'"input_i"\s*:\s*"(-?[\d.]+)"', err) return float(found.group(1)) if found else None def detect_black(path): cmd = ["ffmpeg", "-i", path, "-vf", "blackdetect=d=0.3", "-an", "-f", "null", "-"] err = subprocess.run(cmd, capture_output=True, text=True).stderr return [line for line in err.splitlines() if "black_start" in line] def main(video="deliverables/final.mp4"): info = ffprobe_streams(video) visual = next(s for s in info["streams"] if "width" in s) lufs = measure_lufs(video) checks = { "时长": abs(float(info["format"]["duration"]) - SPEC["duration_s"]) <= SPEC["dur_tol"], "分辨率": (visual["width"], visual["height"]) == (SPEC["width"], SPEC["height"]), "响度": lufs is not None and SPEC["lufs_min"] <= lufs <= SPEC["lufs_max"], "黑帧": len(detect_black(video)) == 0, } for name, ok in checks.items(): print(f"{name}: {'通过' if ok else '未通过'}") raise SystemExit(0 if all(checks.values()) else 1) if __name__ == "__main__": main() ​

退出码是门禁与流水线的接口:零放行、非零拦截,第 9.3 节的 worker 与第 8.3 节的续跑逻辑只看这一位信号,不需要解析输出文本。阈值全部来自 config(第 11.2 节的单一配置源),换平台变体时改配置不改代码。

三、门禁是收编,不是新造

四类之外,前面各章的校验全部登记为门禁项:镜头级时长校验(第 6.3 节 check_alignment)、字幕静态校验(第 7.2 节 validate_cues)、素材许可校验(第 8.2 节 check_assets)、产物校验和(第 8.3 节 manifest)。收编的原则是"一检查一登记":每个检查脚本保持独立可跑,门禁只负责按阶段调用并汇总结果。这样检查逻辑只有一份实现,门禁层永远只做编排——与技能体系的分层(第 8.1 节)同构。

门禁项 来源 阶段出口 通过判据
镜头时长对齐 6.3 节 镜头 视频时长不低于台词时长减容差
素材来源许可 8.2 节 素材 登记齐全且许可明确
字幕静态校验 7.2 节 字幕 无重叠无越界不超字数
产物校验和 8.3 节 合成 manifest 与磁盘一致
四类自动检查 本节 成片 全部通过

四、人工抽检点设计

自动检查全绿仍可能是"难看的合格品":时长达标但节奏稀烂,分辨率正确但主体畸形在容差外被放过。人工抽检点按阶段布防:

阶段 抽检对象与比例 看点
剧本 每条必审 逻辑、敏感点(9.1 节检查点一)
镜头 首尾镜头全查,中间两成抽样 语义、一致性、技术
成片 每条一次一点二五倍速快放 节奏、音画、字幕观感
新模板或新题材首条 各环节全查 连锁反应

抽检结果回流两处:打回原因进废片台账(第 10.2 节分类),漏检事故回头评估自动项要不要加规则——某类问题连续两周被人抓到两次,它就该变成一条自动检查。这是门禁体系自我生长的机制。

五、质量分台账与失败处理流

每条成片交付前打一次分,评分卡五维各一到五分:叙事节奏、画面质量、音画同步、字幕规范、合规完整。评分记录进 quality_log,附一条总评与主要扣分原因。单条分数用处在招聘式的"过与不过",趋势才是真正的消费对象:周维度画五维均值,"画面质量"连续下滑,先查角色卡版本与风格模板变更记录(第 9.2 节),再查模型服务波动——分数异常永远对应一次变更,台账的意义就是让变更可追溯。

门禁失败的处理流固定三步:定位阶段(哪个门禁项红的)、最小重跑(按第 8.3 节粒度只重做受影响的镜头或环节)、复检(原门禁项重跑加相邻一项)。禁止"一把梭重跑整条"——那等于宣告台账与断点续跑白建了。

本节要点回顾

  • 门禁设在阶段出口:自动检查守下限、人工抽检守上限、台账留痕迹。
  • 四类自动检查汇成一个脚本,退出码是流水线唯一依赖的信号。
  • 门禁是既有校验的收编:一检查一登记,检查逻辑不重写。
  • 抽检按风险布防,连续被人抓到的问题升级为自动规则。
  • 评分卡五维进台账,趋势异常回溯变更;失败处理坚持最小重跑。

质量与成本的建制齐了,成片终于可以出门。最后一章讲发布:AI 生成内容的标识义务怎样履行、多平台交付变体怎样组织,以及整条管线怎样打包交付给下一个人。

作者与出处
原作者:灏天文库
整理人: 灏天文库整理
本站整理收录,版权归原作者/开源协议所有;欢迎通过原文链接访问源仓库。
发布者: 作者: 灏天文库 转发
评论区 (0)
U