开发日志
约 2051 字大约 7 分钟
video-bot · 短视频自动生产流水线(FastAPI + LLM + TTS + ffmpeg),闭源私有项目,开发期约 2026.03 - 2026.04。以下按日期整理,√ 表示已完成。
2026/3/25 — 架构定位
- 目前项目供自己本地使用,所以没有做前后端分离(FastAPI 同时承担后端逻辑与简单前端)
- 后续如果想上线,改造顺序:先做 UI(React/Vue + mock 数据跑通)→ 再做前后端分离(FastAPI 只保留 REST API)→ 最后合并接口联调;需要补的后端接口:注册/登录(JWT 鉴权)、多用户主题库隔离、视频记录持久化(当前只存内存,重启丢失 → 换 SQLite / PostgreSQL)
2026/3/26 — 提示词与字幕/配音同步
- √ 视频提示词要紧贴主题:出现板子和设备时要确定型号,不能随便拿一块板子焊或展示,且要和上一个画面/整体主题有关联,不能突然切换风格;必要时可以上一个画面的最后一帧作为下一个分镜的生成参考
- 表格里有一个总的视频提示词,还有每个分镜的视频提示词,分段生成时怎么组织待定
- 用某第三方 TTS 音效时,
SUBTITLE_MAX_UNITS_PER_SECOND = 4刚好 - √ 口播时长、字幕长度、符号停顿三者做计算,实现智能字幕与口播匹配;同理画幅长度、字幕大小、每行字数也可以做计算适配
- 备选视频类型(可能作为以后的主力)——技术科普类:LLM 生成思维导图结构(JSON)→ 用代码渲染成幻灯片帧(Python + PIL 或 Playwright 截图)→ ffmpeg 将幻灯片序列合成视频 + 配音
- √ 前端手动修改画幅和时长后,出现严重的字幕和配音不同步——已修复,原因是视频素材裁短了但音频没有裁
- √ 优先按断句去划分字幕,留气口
- √ 又出现口播文案少了一句字幕文本的情况——视频时长太短、音频太长导致
- 微调方向备忘:每次生成写入
generation_records(主题/标题/文案/视频地址/评分/是否训练样本);方案 A 用户手动 1-5 星,≥4 星自动入训练集;方案 B 按点赞、评论、完播率、分享加权自动评分(完播率权重最高),两方案并存、手动优先;积累 200+ 样本后做第一次微调 - Function Calling 备忘:优先
validate_script_length(校验文案朗读时长 60-70 秒,当前最实际的痛点),其次check_topic_duplicate(生成前查重);MCP 留到有具体场景再设计
2026/3/27 — 合轨策略
- √ 改用"分镜 + 字幕 + 音频先按片段合轨,再合并片段"的策略
- 添加背景音乐
- √ 两个语速参数(字幕预测模型的中文朗读速度 vs 提示词里文案字符数目标的朗读速度)本以为应该是同一个值,担心合并后效果变差——实测合并为同一个值后正常
- 遗留:总是出现最后视频已经停止、音频还在持续播放的错误
- 遗留:字幕断句存在问题,需梳理逻辑并修复
- 如果改用 AI 分段生成视频素材,秒数是严格固定的,还有很多不适配的地方,先优化再实际使用
- 遗留:LLM 幻觉导致偶尔配音重复等问题
2026/3/29 — 选型与提示词优化
- 文案可以有"假装要上广告"这种元素
- 参考同类头部账号做一套代码,素材应该可以直接检索;中间需要特定称呼的专有名词可能需要特定检索,或者以文字帧加特效的形式表现
- 与单片机挂钩的爽文或科幻视频,同样走 AI 流程
- 可以尝试引入能整条视频直接生成的模型,但生成视频的架构需要改——目前的生成接口是分段式的
- 调用生成接口时,想先按关键词检索参考图(比如开发板)一并传过去——似乎接口不支持参考图
- 视频提示词生成需要优化,参考网络上效果好的提示词,可能要分前中后景以增加层次感,还要考虑灯光、角度、摄影要素、风格、是否真实等
- 以后可以考虑添加用户登录系统并接入数据库、部署到服务器;或者做成开源项目
2026/3/31 — 音画时长对齐
- 完整音频比视频长时,视频重复最后一帧没问题,但字幕也跟着不动了,需要优化
- 生成的总音频时长不是"一直偏长",而是有时短有时长——可能是分段校验算法的容差设置得太宽;调小容差会消耗 token 多次重新生成。计划:调小分段校验容差,并把重试上限调高
- 规划:大模型自动生成视频脚本 + 生成 manim 代码 + 自动剪辑配字幕,这类视频主题定为单片机算法相关或偏理论的主题
- 规划:大模型根据已有主题自动生成新主题
- 规划:让大模型定时拉取网络热梗并融入视频
2026/4/1 — 幻灯片渲染模式
- 提示词和架构待优化:生成 slide 模式和 manim 模式视频时要传入对应的画面比例,避免溢出,或做一层校验
- √ slide 模式中成功生成了 slide 代码,但做出来的视频不是渲染的 slide,而是文字
- √ slide 代码太长,改为点击查看,点击后弹窗展示代码
- 除 pexels 模式外,其它模式应该全都不用场景关键词,可以删除
- 目前生成的 slide 太单调
- √ 不同 slide 需要的结构规则不一样:中心型、树型、网型、星型,分别处理
- 后续用 LLM 校验生成的 python 代码:把规则和代码一并传入,不合规就重新生成,反复校验直到合规
- 后面可以考虑 slide 代码生成改并发模式
- slide 重新生成的提示词需要渲染在前端
- slide 可以尝试其它思维导图代码而不一定用 PIL,或直接渲染 HTML 再用 Playwright 截图,或用 SVG
- PIL 仍然存在方框中的文字消失的情况
- √ Playwright 和 PIL 需要拆分——已拆分
- 可以先用 HTML 模板生成 HTML 再让 LLM 美化、给固定风格——后来发现可以直接美化 HTML 模板并写死,无需每次生成都调用 LLM
- √ Playwright 的信息没有渲染到前端——已修复
- 成品视频预览等比例缩小后排成一行,目前太大
- 可以做纯文字视频,做一些有质感的渲染
- 并发似乎失败
- Playwright 模式下可复用 PIL 函数的地方要复用,且 Playwright 也要像 PIL 一样分不同连线类型
- Playwright 模式失败降级到 PIL 时,降级渲染有问题,直接渲染了文字
- √
slides_renderer.py有语法问题——已修复
2026/4/2
- 如何做到节点数不同时的动态调整
- 参考一位做幻灯片图表类视频的博主,画面里画了很多折线图等图表,像是幻灯片配字幕,疑似用 manim 渲染,可以学习
2026/4/6
- √ 警告 / 错误信息(最近 120 条)会显示上次的错误信息,改为只显示本次错误
2026/4/8
- 计划把开发板、OLED 屏这类可以固定下来的素材拍摄抠图,放到目录中并设置固定名称,在 manim 模式下让 LLM 动态调用这些素材
2026/4/9 — 素材生成选型观察
- 对于"一个物品转换成另一个物品"的效果,分段生成的接口表现很差,另一家整体生成的接口效果好很多
Powered by Waline v3.6.0