← 返回技术文章

pro4 · 自动成片 / 故事线 → Timeline

AutoClip

故事线 / 脚本 → 可执行时间线,服务云剪辑与自动成片链路。

一、背景

自动成片链路里,瓶颈往往不在「能不能剪」,而在如何把创意与脚本稳定落成可执行的时间线:分镜怎么拆、素材怎么对齐、字幕与装饰轨怎么跟口播节奏走、以及怎样把这一切交给云端或端侧同一套渲染语义。业务上常见输入是故事线、口播稿或结构化脚本,输出应是云剪辑 / 端预览都能消费的 Timeline,中间若全靠人工对齐,成本高且难以规模化。

AutoClip 正是在这一缺口上发力:把文案、分镜意图、素材候选与轨道级装饰编排成一条可重复执行的生产路径。可与首页 适用场景 中云剪辑与 AI 自动成片相关阶段对照;落地形态与 pro2 Linux 云剪辑、站内 行业笔记 中的业务场景亦可交叉阅读。

二、方案

本项目定位为流程编排框架:在「脚本 / 故事线 → 结构化分镜与槽位 → 内部 Timeline 表示 → 下游渲染或云剪辑任务」之间,用可扩展的步骤与数据契约把各环节串起来;典型编排上会结合大模型产出与规则引擎约束,再映射为 JSON 化时间线,由 worker 或端侧消费。任务状态、重试与与消息队列的衔接可与云剪辑整体管线对齐(参见 pro2 技术文档中的调度与管线思路)。

说明:下文第三节起Ai_Clip 落地技术方案(按模块),按「模块怎么串、输入输出、技术选型、前后端分工」展开;与仓库内 docs/研发落地规格说明.md 对齐(以仓库实际提交为准)。演示成片、补充图仍可置于 resource/pro4/

三、Ai_Clip 落地技术方案(按模块)

目标是把「能落地交付」写清楚:模块之间怎么串、每个模块的输入 / 输出用什么技术哪些交给后端检索哪些由本地规则与编排控制

3.0 总体数据流(模块之间的关系)

为避免不同环境对流程图渲染不一致,使用文本流程图表达:

0 素材预处理/转码(LD/SD/HD)
  ├─> 素材理解/打标(外部/异步) ──> 4 召回+规则匹配
  ├─> 2 分句+特征+标签+描述(query_text)
  └─> 4 召回+规则匹配(调用后端检索服务)

1 文案故事线生成
  └─> 2 分句+特征+标签+描述(query_text)

2 分句+特征+标签+描述
  ├─> 3 TTS
  ├─> 4 召回+规则匹配
  └─> 5 装饰元素规划

3 TTS ──> 6 Timeline 组装
4 召回+规则匹配 ──> 5 装饰元素规划 ──> 6 Timeline 组装 ──> 6.2 渲染输出成片

3.1 模块 0:素材预处理(转码分级:低 / 中 / 高)

该模块通常是「素材平台 / 转码服务」的能力,不属于图文匹配本体,但对整条链路非常关键:它决定了后续各模块使用哪一份码率 / 分辨率的视频资产。

目标:客户上传的原始视频经过转码,生成多档位版本(LD / SD / HD),并输出统一可用的素材索引(URL、码率、分辨率、时长、校验信息)。

输入:客户原始素材(原视频 URL 或上传文件)。

输出:

模块关系(关键):

关键技术:FFmpeg(H.264 / H.265)、分辨率与码率控制、关键帧间隔;队列 + 幂等(job_id)+ 回调;对象存储(OSS / S3)与可选 CDN;时长一致性、首帧可解码、音轨、MD5 / CRC 等质量校验。

落地要点:理解 / 打标用 SD、成片用 HD;clip 可追溯至 asset + 时间范围与各档位 URL;某档位失败时可回退相邻档位(如 SD 失败用 LD 打标)。

3.2 模块 1:提示词工程 + LLM 生产故事线文案

目标:从 Brief 生成可审核的故事线文案(段落 / 主题 / 风格统一)。

输入:Brief(品牌、品类、平台、时长、禁用词、关键词、风格)。

输出:storyline_text / StoryboardDraft(可人工审核)→ 进入模块 2。

关键技术:Prompt 工程;RAG 约束文案事实与合规;LLM 可选本地 Ollama(qwen3:8b)或云模型(通义 / DeepSeek 等);LangChain LCEL:Prompt → LLM → Parser。

模型选型提要:结构化输出稳定性、中文广告理解、多次输出一致性、禁用词与必含字段可控性。

调用方式:云模型(如阿里百炼 / Model Studio 通义千问)走 HTTP API,官方 SDK 本质是 HTTP 封装;本地 Ollama 则本机起服务、本地 HTTP。

阿里付费模型(通义千问)参考:

对接与结构化输出可参考: DashScope / 百炼 Qwen API(Model Studio)Qwen 结构化输出(JSON Mode / Structured output)

落地要点:采纳率 / 打回原因 / 二次编辑率;输出宜为可版本化 JSON;RAG 降低幻觉与合规风险;知识库变更采用离线重建索引(如 Chroma persist)、发版后重启服务加载,避免不停服热更新的复杂度。

3.3 模块 2:分句(分镜 beat)+ 特征 / 标签 + 描述句(query_text)

目标:把故事线拆成可匹配的 beats,并为每个 beat 产出 tags / feature 与用于向量召回的 query_text

输入:storyline_text + 约束(总时长、每屏字数、beat 数量范围)。

输出:beats[]:含 copy_textduration_hint_secfeature.tags / scene / action / shot / mood 等、query_text

模块关系:beats + query_text → 模块 4;copy_text → 模块 3;beats → 模块 5。

关键技术:LLM 结构化输出(Pydantic / JSON Schema);一致性 Prompt;可选 RAG 对卖点 / 规格 / 禁用词再校验。

落地要点:tags 由 LLM 生成、类目不同则 tag 空间自然变化;query_text 要检索友好;强一致业务可把 RAG 清单写成 must_have / must_not;Chroma 持久化目录作版本化 artifact(manifest:kb_version、embed_model、chunk 参数),部署下载后配置 + 重启切换版本。

3.4 模块 3:TTS 转语音(含字级时间轴)

目标:将每个 beat 的文案变成音频,并取得对齐信息。

输入:beats[i].copy_text + 音色 / 语速 / 情绪等。

输出:audio_urlaudio_duration_secchar_timings[](字 / 词起止,用于字幕逐字高亮与卡点)。

模块关系:输出进入模块 6 的 Timeline(音轨 + 字幕时间对齐)。

关键技术:阿里云 / 火山 / 腾讯 / 自建 TTS 任选;字 / 词级时间戳;若无则 forced-alignment 补齐。

落地要点:字级 timing 是剪映类字幕效果的关键输入;失败可降级句级 timing。

3.5 模块 4:后端召回 + 本地规则匹配

分工:

3.5.1 后端检索接口(Retrieval Service)

输入:query_text + filters(filters 可由 beat 的 tags 自动生成)。

输出:TopK,每项含 clip_id、score、metadata、recall_source

关键技术:Chroma(PoC)/ Milvus / pgvector / 云向量;embedding 由后端统一版本;metadata 过滤(brand、时长、权限等);混合召回 vector + tag union。

3.5.2 本地规则匹配(Matching)

输入:beat(feature + tags + duration_hint_sec)+ TopK。

输出:MatchResult(Top1 + 可解释子分)。

通用规则维度:vector_score;tag 重叠(Jaccard / 命中率);时长与 duration_hint_sec 接近度与可裁剪约束;可选 hard_filters(brand、画幅、可用性等)。

落地要点:TopK 常取 5~10;召回为空须放宽 must_tags 或时长再召;保留 Top2 / Top3 作渲染失败回退。

3.5.3 生产可用:硬过滤 + 多维打分 + 可解释输出

A. 硬过滤(不满足则剔除):brand / 类目;可用性(未下架、版权、水印、画幅);candidate_duration >= beat.duration_hint(否则剪不够);must_not(竞品 / 禁用词命中 OCR 或 tags)。部分可由后端代过滤,本地仍建议兜底校验。

B. 多维打分(0~1 归一后加权):

S = w_sim·S_sim + w_tag·S_tag + w_dur·S_dur + w_scene·S_scene + w_shot·S_shot + w_ocr·S_ocr − w_rep·P_repeat

默认权重(可调):w_sim=0.50,w_tag=0.20,w_dur=0.10,w_scene=0.08,w_shot=0.07,w_ocr=0.05,w_rep=0.20。

C. 选片:总分 Top1 成片,保留 Top2 / Top3 备选。

D. 兜底:放宽 must_tags、扩大时长、回退品牌通用模板库。

3.5.4 Re-rank 位置与可选 Learning-to-Rank

两阶段:Recall(后端)→ Re-rank(本地加权,本质可解释重排)。后续可把特征(vector_score、tag_score、duration_score、scene、ocr_hit、quality…)喂给 LR / XGBoost / 小 MLP,用「被采纳 (beat, clip)」为正、TopK 内未采纳为负构造训练数据,自动学习权重。

3.6 模块 5:装饰元素规划(LLM)

目标:在已确定 beats、匹配 clips、TTS 节奏基础上,生成装饰方案(剪映类:字幕样式、贴纸、转场、音效触发等)。

输入:beats[](含 char_timings)、matches[]

输出:DecorationPlan(结构化 JSON:字体 / 描边 / 入场动画、贴纸位与出现时间、切点转场与滤镜、音效关键字等)。

关键技术:LLM + JSON Schema;素材库约束(仅允许 sticker_pack / effect_pack 内资源)。

落地要点:可校验(不挡主体、密度可控、资源可用);不合规回退默认模板。

3.7 模块 6:Timeline 协议组装

目标:将模块 2 / 3 / 4 / 5 产物组装为渲染引擎可消费的 Timeline JSON。

输入:matches[]、TTS(audio_url + char_timings)、bgmdecoration_plan

输出:Timeline JSON(版本化 Schema)。

关键技术:时间对齐以 TTS 时长为主导反推画面时长与切点;缺素材 / 缺装饰的默认回退;落库前 schema 校验与静态检查。

3.7.1 背景音乐(BGM):人工打标库

目标:按风格与平台从人工标注音乐库选 BGM,裁剪 / 循环 / 淡入淡出 / 音量曲线(含口播 ducking)。

输入:brief.style、成片总时长、可选 beats 节奏或 bgm_style

输出:bgm_idbgm_url、使用区间、volume_envelope

关键技术:DB 按 style_tag、BPM、是否有人声、mood 过滤;同风格随机或加权随机;FFmpeg 裁剪循环与混音;可选 ducking。

落地要点:稳定 style_tag 与版权字段;BGM 短于成片时循环 / 拼接 / 换曲按平台策略。

3.7.2 渲染输出成片(模块 6.2)

目标:将 Timeline JSON 转为可交付 MP4(或 URL)。

输入:timeline_json、各轨所需素材 URL(视频 HD、TTS、BGM、贴纸字体特效)。

输出:final_video_urlrender_report(耗时、失败原因、缺失列表)。

方式 A(推荐生产):云剪辑 / 模板化渲染引擎,异步任务 submitted → running → success/failed,回调或轮询。

方式 B(PoC / 内网):自建 FFmpeg filter_complex 拼接、叠字幕贴纸、混音;高级动效支持有限但可验证闭环。

落地要点:渲染前静态检查时间轴与资源可达;OSS 预热与缓存;TTS 为主、BGM ducking、结尾淡出;缺资源回退默认与备选 clip。

3.8 与当前仓库实现的映射

3.9 生产必备补充

合规与可用性

模块 1 / 2 后做文案合规(广告法风险词、禁用词、敏感词);素材版权、下架、画幅、水印、可裁剪时长;Timeline schema 与 URL 可达性校验。

跨分镜全局策略

去重(避免多 beat 同一 video_id 或过于相邻重复);卖点 / 景别 / 场景覆盖;某 beat TopK 全不可用时的放宽与模板兜底。

观测与复盘

trace_id 贯穿:文案 → 召回 → 重排 → TTS → 装饰 → timeline → 渲染;落库保留每 beat 的 TopK、最终选择、各子分与过滤原因,便于调参。