视频自动化:花生 AI 功能反向分析与实现拆解
基于公开页面、公开前端 bundle、浏览器网络请求与可见 UI 行为整理。未绕过登录、未访问私有后端源码,涉及服务端内部算法的部分均标注为“推断实现”。
1. 产品定位
花生 AI 是一个“文稿/口播输入 -> 自动生成视频项目 -> AI 辅助剪辑与素材匹配 -> 导出成片”的视频创作智能体。
它的核心能力不是单一 TTS 或播放器,而是一条视频自动化生产链:
- 输入文稿或上传口播音频/文稿文件。
- 自动拆解文稿为分镜/段落/字幕。
- 自动匹配公开视频素材、模板素材或用户本地素材。
- 自动生成项目方案、分镜规划和初版视频。
- 在项目编辑器中通过 AI Agent 或手动操作继续微调。
- 完成配音、字幕、素材替换、重排、导出等流程。
2. 已观测到的技术栈
前端
- Next.js App Router + React。
- Ant Design、部分 MUI、Tailwind 风格 utility class、CSS Modules。
- MobX 状态管理。
- 静态资源由
s1.hdslb.com/bfs/static/innovideo/...承载。 - 图片、视频、图标等资源由
i0/i1/i2.hdslb.com承载。
登录与安全
- 登录态通过 Bilibili/花生账号体系判断。
- 登录接口观测:
https://api.huasheng.cn/x/web-interface/nav。 - 未登录时项目详情、VIP 信息等接口返回
401或-101。 - POST 请求会自动追加
csrf,来源是 cookie 中的bili_jct。 - 页面加载 Bilibili Gaia/minntaki 相关安全 SDK/WASM。
埋点与实验
- 错误监控和埋点:
biliMirror、reporter-pb。 - 埋点上报:
https://data.huasheng.cn/v2/log/web。 - A/B 实验变量包括:
agent_pagefront_montagemontage_compositepodcast_mtqlocal_recall
3. 页面与接口入口
用户给定页面
https://www.huasheng.cn/videov2/89228750983169该页面会请求:
GET /api/innovideo/project/info?pid=89228750983169未登录观测响应:
{"code":401,"reason":"账号未登录","message":"账号未登录","metadata":{}}因此未登录状态下页面最终落到首页创作台。
公开配置接口
GET /api/innovideo/config观测到的关键配置:
script_max:10000audio_script_max:50000user_material_max:200tts_speed_switch:true- 默认文稿、默认音色、音色列表、举报标签、模型配置等。
首页创作相关入口
/project/create
/podcast/project/create
/api/huasheng/project/create?csrf=...创建成功后根据项目类型跳转:
/video/{pid}
/videov2/{pid}
/podcast/{pid}
/podcastv2/{pid}4. 全功能清单
首页创作台
- 文稿输入。
- 文稿字数限制。
- 上传口播音频。
- 上传文稿文件。
- 选择画面形式。
- 选择口播配音。
- 创建项目。
- 展示花生介绍视频。
- 展示灵感发现视频列表。
- 返回旧版。
- 联系客服。
- 隐私政策、服务协议、备案信息。
项目创建
- 普通视频项目。
videov2新版视频项目。- 播客项目。
podcastv2新版播客项目。- 示例项目创建。
- 服务协议确认。
- 安全风控提示。
- VIP/套餐权限拦截。
- 本地素材召回项目标记。
AI Agent 编辑
观测到的 Agent 能力文案和接口表明其支持:
- 载入项目工程。
- 获取项目信息。
- 规划项目方案。
- 解析视频脚本。
- 生成分镜规划表。
- 搜索视频素材。
- 联网检索创作素材。
- 检索匹配素材。
- 匹配分镜字幕。
- 更新任务清单。
- 更新视频分镜。
- 编排新增分镜。
- 修改分镜字幕。
- 重排分镜顺序。
- 移除分镜片段。
- 重配当前分镜画面。
- 执行子任务。
- 取消会话。
- 加载聊天历史。
相关接口:
/api/huasheng/chat/run
/api/huasheng/chat/events
/api/huasheng/chat/history
/api/huasheng/chat/cancel
/api/huasheng/chat/state
/api/huasheng/chat/answers
/api/huasheng/chat/tool-cost
/api/huasheng/chat/running/effectsSSE 事件流:
//sse.huasheng.cn/api/huasheng/chat/eventsTTS 与口播配音
- 公共音色列表。
- 口播音色选择。
- 语速开关。
- 创建 TTS 任务。
- 轮询 TTS 结果。
- 自动播放生成音频。
- 失败提示和重试。
相关接口:
/material/tts/list
/tts/task
/tts/task/result
/voice/save音色克隆
- 10 秒快速克隆。
- 上传本人录音克隆。
- 上传身份核实音频。
- 实名认证拦截。
- 朗读文案一致性校验。
- 音色保存。
- 音色重命名。
- 音色删除。
- 音色模型更换。
- 旧音色升级提示。
相关接口:
/voice/quick/clone/task/v2
/voice/quick/clone/task/result/v2
/voice/clone/prerecorded/task/v2
/voice/clone/prerecorded/task/result/v2
/voice/clone/list
/voice/clone/save
/voice/clone/rename
/voice/clone/delete
/voice/clone/change/engine
/voice/clone/identity
/voice/clone/text会员、积分、支付
- VIP 信息。
- 会员权益。
- 套餐面板。
- 充值下单。
- 订单状态。
- 开通记录。
- 订阅记录。
- 取消订阅。
- 积分面板。
- 积分记录。
相关接口:
/api/vip/info
/api/vip/recharge/panel
/api/vip/recharge/pre/order
/api/vip/recharge/order/status
/api/vip/recharge/record
/api/vip/subscribe/record
/api/vip/subscribe/rescind
/api/point/panel
/api/point/record
/api/point/batches5. 自动分段:需要关注哪些信息
自动分段是整个系统的第一层结构化能力。它决定后面的素材匹配、字幕生成、镜头节奏和手动微调体验。
5.1 输入来源
花生支持至少三类输入:
- 直接输入/粘贴视频文稿。
- 上传口播音频。
- 上传文稿文件,例如
docx。
上传控件观测到的 accept 类型包括:
audio/mpeg
audio/wav
audio/vnd.wav
audio/flac
audio/x-flac
audio/mp4
audio/m4a
audio/x-m4a
video/mp4
application/vnd.openxmlformats-officedocument.wordprocessingml.document5.2 分段目标
自动分段不只是把文本按句号切开,而是要生成“可剪辑单元”:
- 段落。
- 分镜。
- 字幕片段。
- 口播音频片段。
- 素材匹配 query。
- 每段建议时长。
- 每段画面风格或镜头意图。
5.3 可复刻的数据结构
type ScriptSegment = {
id: string;
index: number;
text: string;
summary: string;
keywords: string[];
visualQuery: string[];
startTime?: number;
endTime?: number;
duration?: number;
speaker?: string;
emotion?: string;
sceneType?: "fact" | "story" | "transition" | "quote" | "conclusion";
status: "draft" | "matched" | "edited" | "rendering" | "done" | "failed";
};5.4 推断实现流程
- 文稿清洗:去除空行、特殊符号、无意义停顿词。
- 语义分段:按主题变化、句群、转折词、时间线、因果结构切分。
- 字幕分句:把长段拆成适合展示的字幕句。
- 时长估算:按字数、语速、音频识别结果估计每段时间。
- 生成视觉 query:为每个段落提取素材检索词。
- 生成分镜规划:输出镜头顺序、画面建议、字幕和配音映射。
5.5 口播音频分段
如果输入是音频,自动分段还需要:
- ASR 转写。
- 句级时间戳。
- 静音检测。
- 换气声/停顿保留。
- 字幕对齐。
- 音频片段切分。
页面文案提示音频要求:
- 音频环境要安静。
- 音量大小保持一致。
- 不要重复拼接同一段音频。
- 支持口播音频文件上传。
5.6 分段质量评估
一个好的自动分段应该满足:
- 每段语义完整。
- 字幕长度适合阅读。
- 时长接近实际口播节奏。
- 每段都能生成明确的素材搜索意图。
- 段落边界方便用户手动调整。
- 分段失败时可回退到原文或重新生成。
6. 自动匹配素材:需要关注哪些信息
自动匹配素材是花生最关键的自动化能力之一。它同时包含服务端素材检索和浏览器本地素材召回。
6.1 素材来源
从页面和 bundle 推断,素材至少来自三类:
- 平台运营/推荐素材。
- 联网检索或 B 站公开视频素材。
- 用户本地关联文件夹中的素材。
首页“灵感发现”视频列表来自:
https://api.huasheng.cn/x/activity_components/eva_operation/list?source_id=29ERAmwloghvktd00&pn=1&ps=506.2 画面形式
首页可见“画面”选择:
- 视频素材。
- 音画模板。
这说明匹配素材时存在两套策略:
- 以真实视频片段填充画面。
- 以音频模板/视觉模板生成音画组合。
6.3 匹配对象
自动匹配不是匹配整篇文稿,而是匹配每个分镜或字幕段:
type MaterialMatchRequest = {
segmentId: string;
text: string;
keywords: string[];
visualQuery: string[];
desiredDuration: number;
aspectRatio: "16:9" | "9:16" | "1:1";
style?: string;
avoid?: string[];
source: "platform" | "web" | "local";
};6.4 匹配结果结构
type MaterialCandidate = {
id: string;
source: "platform" | "web" | "local";
title?: string;
filePath?: string;
url?: string;
cover?: string;
startTime: number;
endTime: number;
duration: number;
score: number;
reason?: string;
tags?: string[];
copyright?: "unknown" | "allowed" | "restricted";
};6.5 本地素材召回证据
公开 bundle 中能看到明显的本地召回服务:
LocalRecallServicePhase1_QueryPhase2_PackagePhase3_UploadTextSearchServicesearchByTextmeta.jsonlocal_recall_result_{taskId}.zip
本地召回流程:
- 用户关联本地文件夹。
- 浏览器读取并索引本地视频素材。
- 下载/加载本地 AI 模型。
- 用文本 query 搜索视频片段。
- 召回结果按
filePath + startTime + endTime去重。 - 生成关键帧 jpg。
- 打包
meta.json + jpg成 zip。 - 上传 zip 到 UPOS。
- 后端把召回结果绑定到项目分镜。
6.6 本地模型
观测到模型资源:
https://boss.hdslb.com/webcut/models/clip/vit-b-16.img.fp32.onnx
https://boss.hdslb.com/webcut/models/clip/vit-b-16.txt.fp32.onnx
https://boss.hdslb.com/webcut/models/clip/vocab.txt
https://boss.hdslb.com/webcut/resources/onnxruntime-web@1.23.2/这说明本地素材匹配很可能使用 CLIP 类图文向量检索:
- 图像模型:提取视频关键帧 embedding。
- 文本模型:提取分镜 query embedding。
- 相似度检索:返回最相关视频片段。
6.7 自动匹配流程复刻
文稿分段
-> 为每段生成素材 query
-> 搜索平台素材/联网素材/本地素材
-> 获取候选片段
-> 按相关性、清晰度、时长、版权、水印、黑边等打分
-> 给每个分镜选择 Top 1
-> 保留 Top N 作为手动替换候选
-> 写入项目时间线6.8 素材质量过滤
配置接口中举报标签暴露了素材质量维度,可作为过滤规则:
- 敏感人物或物品。
- 违法违规。
- 色情低俗。
- 引人不适。
- 侵权。
- 重复出现。
- 素材画风突兀。
- 不相关。
- 不清晰。
- 有水印或字幕。
- 黑边。
- 其他。
这些标签说明素材匹配后有质量反馈闭环,适合做:
- 自动降权。
- 用户反馈训练。
- 二次推荐。
- 黑名单过滤。
7. 手动微调:需要关注哪些信息
手动微调是自动生成后的关键体验。自动化系统必须允许用户快速纠错,而不是只给一个不可编辑的视频。
7.1 可微调对象
应支持至少这些编辑对象:
- 分镜顺序。
- 分镜字幕。
- 每段素材。
- 素材裁剪起止时间。
- 口播配音音色。
- TTS 语速。
- 音频模板。
- 画面模板。
- 分镜新增/删除。
- 本地素材替换。
- AI 重新匹配。
bundle 文案中观测到的相关能力:
修改分镜字幕重排分镜顺序移除分镜片段请重配当前分镜的画面搜索分镜搜索分镜(输入描述关键词,按回车搜索)已匹配我的素材已搜索视频素材目标分镜正在合成中,请稍后再试
7.2 手动微调的数据模型
type TimelineScene = {
id: string;
order: number;
subtitle: string;
voiceText: string;
material: MaterialCandidate | null;
alternatives: MaterialCandidate[];
startTime: number;
endTime: number;
locked: boolean;
renderState: "idle" | "rendering" | "done" | "failed";
};7.3 微调交互建议
适合实现的交互:
- 点击分镜,右侧显示字幕、素材、音频、模板。
- 字幕可直接编辑。
- 素材可一键“重配”。
- 素材可搜索替换。
- 保留候选素材列表。
- 分镜可拖拽排序。
- 分镜可锁定,避免 AI 后续改动。
- 支持撤销/重做。
- 支持保存点/版本点。
- 支持“只重配当前分镜”,避免全局重生成。
7.4 撤销重做与保存点
观测到项目版本相关接口:
/api/huasheng/project/checkpoint/list
/api/huasheng/project/checkpoint/undo_redo
/api/huasheng/project/savepoint/list
/api/huasheng/project/savepoint/apply
/api/huasheng/project/savepoint/undo_redo这说明手动微调不是直接覆盖项目,而是有操作历史或保存点机制。
可复刻方案:
type ProjectOperation = {
id: string;
type:
| "segment.updateText"
| "segment.replaceMaterial"
| "segment.reorder"
| "segment.remove"
| "segment.add"
| "voice.change"
| "template.change";
payload: unknown;
inversePatch: unknown;
createdAt: number;
};8. 推荐实现架构
前端模块
apps/web
/create 首页创作台
/video/[pid] 视频编辑器
/podcast/[pid] 播客编辑器
/components
/stores MobX/Zustand 状态
/services
project.ts
agent.ts
tts.ts
voiceClone.ts
material.ts
upload.ts
localRecall.ts后端服务
services
auth-service
project-service
script-segmentation-service
material-search-service
tts-service
voice-clone-service
agent-service
billing-service
upload-service核心流程
CreateProject
-> NormalizeInput
-> SegmentScript
-> GenerateStoryboard
-> MatchMaterials
-> GenerateVoice
-> BuildTimeline
-> SaveProject
-> OpenEditorAgent 流程
POST /chat/run
-> 创建 run
-> SSE /chat/events 推送执行状态
-> 工具调用修改项目
-> 用户确认或继续追问
-> 写入 checkpoint/savepoint9. 最小可行复刻版本
如果要做一个简化版,建议优先实现:
- 文稿输入。
- LLM 自动分段。
- 每段生成素材 query。
- 从本地素材库或公开视频 API 搜索候选素材。
- 自动选 Top 1 生成时间线。
- 用户可编辑字幕、替换素材、重排分镜。
- TTS 生成配音。
- FFmpeg 合成视频。
- 操作历史支持撤销/重做。
可以先不做:
- 会员支付。
- 音色克隆。
- 浏览器端 ONNX 本地召回。
- 复杂 Agent 工具链。
- 多人播客。
- 大规模素材质量反馈系统。
10. 风险与边界
- 服务端具体模型、排序规则、版权策略不可从公开前端完全确认。
- 未登录状态无法验证完整项目编辑器界面和导出流程。
- 自动素材匹配涉及版权、肖像权、水印、平台授权,需要在自研实现中单独设计合规策略。
- 本地文件夹召回依赖浏览器 File System Access、OPFS、ONNX Runtime,兼容性和性能都需要实测。
11. 证据索引
观测页面:
https://www.huasheng.cn/videov2/89228750983169关键公开接口:
GET https://www.huasheng.cn/api/innovideo/config
GET https://www.huasheng.cn/api/innovideo/project/info?pid=89228750983169
GET https://api.huasheng.cn/x/web-interface/nav
GET https://api.huasheng.cn/x/activity_components/eva_operation/list?source_id=29ERAmwloghvktd00&pn=1&ps=50关键前端 bundle 证据:
/_next/static/chunks/app/video/page-*.js
/_next/static/chunks/app/page-*.js
/_next/static/chunks/app/layout-*.js关键功能字符串:
规划项目方案
解析视频脚本
生成分镜规划表
搜索视频素材
检索匹配素材
匹配分镜字幕
修改分镜字幕
重排分镜顺序
移除分镜片段
本地模型未启用,无法选择参与匹配成片
下载本地AI模型,并启用素材智能解析