Files
autoclip/docs/PIPELINE_V2_PLAN.md
周小舟andClaude Opus 5.5 3b8088c8a4 fix(studio): backups render only once prepared; review fixes
- A backup clip being framed and packaged is 'preparing', invisible to the
  render dispatcher, so it can no longer ship raw; claiming it is atomic.
  A failed preparation settles the generation, retry prepares it again, and
  one interrupted by a restart becomes retryable.
- The results page keeps polling while outputs are preparing or rendering.
- AI cover redesign: no false success on timeout, nothing after unmount.
- Saved post copy shows at once; title lines keep their place while typing.
- Generated-image downloads refuse local/private hosts (each redirect too)
  and stop at 40 MB.
- Docs: cloud ASR numbers, CHANGELOG entries for this round.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 18:37:01 +08:00

6.0 KiB
Raw Permalink Blame History

出片链路 V2:按今天的模型能力重做

状态:第 1–6 项已完成,第 7 项延后;真实素材复测中(2026-10-01)。每完成一项在「进度」里记一笔,版本发布说明从这里整理。

为什么要重做

原链路是在模型上下文小、输出不稳定的时候设计的:一条视频切成 5000 字一块,每块依次跑「大纲 → 时间线 → 评分 → 标题」四次调用,再加主题聚类与逐片段重编码;为了适配模型,中间还有大量 JSON 修复、重试、对齐与兜底。今天主流模型有 128K 以上上下文、稳定的结构化输出,这些拆分多数已经没必要。

实测基线(MrBeast 访谈 2h06m → TikTok,旧链路,单线程模型调用)

阶段 用时 模型调用 输入 / 输出 tokens
下载 + 判断 ~1 分 0 —
语音识别(本地 Whisper base) 9.3 分 0 —
大纲 10.3 分 33 102K / 27K
时间线 13.4 分 33 216K / 36K
评分 10.6 分 32 59K / 28K
标题 0.6 分 30 28K / 1K
切点精修 0.8 分 33(已并行) 67K / 8K
包装 — 每片段 1 小
渲染 33 支 见下方结果 0 —

模型费用约 ¥0.6/条(qwen-plus 按 ¥0.8/百万输入、¥2/百万输出),瓶颈是时间与本机负载,不是钱。

计划

# 项目 做法 预期
1 模型调用并行 每块独立调用并行(4 路;本地模型保持串行) ✅ 已完成;分析 34 分 → ~9 分
2 一次挑片(合并大纲 / 时间线 / 评分 / 标题) 整段字幕按「行号|时间|文本」紧凑格式一次给模型(超长视频按 ~60 分钟窗口并行、窗口间重叠),直接返回片段:起止行号、标题、推荐理由、分数;程序校验 + 复用 refine_timeline / select_clips;输出与旧 titled_clips 同格式,下游不变。失败时回退旧四步。只用于快速出片,旧项目页链路不动 4 步 → 1 步;时间与 tokens 再降一半以上
3 切点规则并入挑片 挑片提示词直接要求「从问题开头到回答讲完,不以下一个问题结尾」;对比有无逐片段精修调用(T1)的切点质量,不劣化就去掉 T1 每片段少 1 次调用
4 硬件编码 macOS VideoToolbox、Windows NVENC / QSV / AMF,启动时试编码探测,不可用回退 libx264;码率按画质对齐 渲染快数倍,风扇安静
5 按需渲染 默认只自动渲染评分最高的 10 支,其余在结果页点「生成」再渲染 渲染量与包装调用约降 2/3
6 平台字幕直用 YouTube 有人工字幕时直接用,跳过语音识别;自动字幕无标点,仍走 Whisper 省 ~9 分钟/2 小时视频
7 词级时间对字幕 Whisper 已产出词级时间,接到包装字幕的逐词/分屏时间上 字幕与声音更同步
8 记录与发版 本文档 + 进度文档 + CHANGELOG / 发布说明;按 RELEASE_CHECKLIST 出 Pre-release —

回归对比(第 2、3 项上线前)

用已有 4 个真实项目(Dario 2h22m、Sam Altman 39m、小岛秀夫 17m、MrBeast 2h06m)新旧各跑一遍,比较:片段数、时长分布、与旧选择的重合、标题与理由质量(人工抽读)、切点(音频停顿对照)、用时、tokens。

进度

  • 2026-10-01:裁掉主题聚类与逐片段重编码;同语言包装不复述原文;取景检测共用;模型输入紧凑 JSON;按项目/阶段记录 tokens(metadata/llm_usage.jsonl)。
  • 2026-10-01:第 1 项完成(pipeline/concurrency.py)。
  • 2026-10-01:第 2 项完成(pipeline/clip_finder.py)。回归对比(新 / 旧):小岛 17 分钟 1 次调用 15 秒,10 段中 9 段与旧选择重合;Sam Altman 39 分钟 1 次调用 16 秒,10 段全部重合,平均时长 251 → 109 秒;MrBeast 2h06m 4 次调用 38 秒(旧 ~35 分钟 / 128 次 / 50 万 tokens → 9.3 万);Dario 2h22m 3 次调用 18 秒,26 段中 23 段重合。挑片时长按短视频平台改为 60–300 秒(最好 90–180 秒),去掉旧版长视频「至少 90 秒」的机械补长——它会把下一个问题补进片段。标题强制中文,不合规重试一次。
  • 2026-10-01:第 3 项评估:挑片的起止行仍常是半句(尤其无标点的 Whisper 转写),逐片段精修(句子对齐 + 音频停顿 + 模型确认问答首尾)继续保留;成本很低(33 段约 ¥0.07)。
  • 2026-10-01:第 4 项完成(services/video_encoder.py)。本机 30 秒 1080×1920:x264 墙钟 3.6 秒 / CPU 13.4 秒,VideoToolbox 墙钟 4.1 秒 / CPU 3.0 秒——墙钟相近,CPU 降到约 1/4,风扇问题解决;渲染墙钟的大头在滤镜与字幕叠加,不在编码。
  • 2026-10-01:第 5 项完成:自动只渲染评分最高的 10 条,其余为「备选片段」,点击后才取景、包装、渲染;追加平台沿用每个片段的选择。
  • 2026-10-01:第 6 项完成:视频有作者上传的原语言字幕时直接用(Dwarkesh 的 Karpathy、Jensen 访谈都有),跳过本地语音识别;自动字幕不用。
  • 2026-10-01:新增:包装调用并行(原来每段 ~20 秒依次执行,25 段 ~8 分钟)。
  • 2026-10-01:第 7 项延后到下一版:Whisper 词级时间虽已请求,但整份文件任一词时间重叠就整体作废,实测从未产出;需要先清洗词时间(单调化、夹到句内)再接入字幕,单独做。
  • 2026-10-01:新增云端语音识别(百炼 qwen-audio-3.1-asr-flash,8 路并行上传):TIM 2h52m 中文 23 分钟 → 3.6 分钟;回归集 9 条新素材全程 4.5–22 分钟、文字模型 ¥0.02–0.17(成本与时间)。
  • 2026-10-01:每条成片带发布包(文案、封面、导出),封面默认本地设计,AI 封面由用户自选生图服务;字幕语言按平台受众(英文平台全英文)。第 8 项(记录与发版)进行中,交接见 1.5.0 交接文档。