mirror of
https://github.com/zhouxiaoka/autoclip.git
synced 2026-10-02 02:34:34 +08:00
- 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>
6.0 KiB
6.0 KiB
出片链路 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 交接文档。