⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 http://www.iocoder.cn/Fight/geekreel-video-workbench/ 「芋道源码」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

一支竖屏短剧拍到第三集,观众开始出戏,问题通常不在模型画得差。人物换了张脸,同一间屋子前后两种装修,这类毛病全部落在生成之后的返工里。

GeekReel 的作者被这件事磨过。这个十月初建库的项目把力气花在生成之前,先让人物、事件、风格站住,再让模型动笔。

它是一套跑在本机的视频工作台,TypeScript 写的,Unlicense 授权,版本 0.1.0。选题、拆结构、写剧本、定妆、出片段、剪成片收在同一个窗口里,不用在几个网页之间来回拷提示词。

一、整套东西只在本机跑

没有账号,也没有云端成片库。项目文件、素材、密钥全留在这台机器上,模型调用走自己配的端点。付费墙、功能锁、激活码一概没有,代码整份在仓库里。

版本号 0.1.0,早得很。功能已经铺得很散,小说转短剧、连载、风格包、爆款复刻各占一块,画布、时间线、资产库在中间,任务中心、模型中心、首页向导、热点雷达、视频分析散在两头,另有一个设置页。

本地优先的代价在后面。模型得自己接,账要自己算,数据搬家也自己动手。下面按一条片子走过的顺序捋。

二、先拆人物和事件,再拆集

小说转短剧这一段,办法是先读完再动手。素材可以是 txt、md,也可以丢一个能打开的链接,或者把正文直接贴进框里。

通读之后先出两份东西,一份人物档案,一份事件清单。档案把外貌、性格、身份、穿搭拆成条目,事件按剧情先后排好。

人物档案与事件清单

这两份是后面所有工序的地基,都确认过才进拆集,一集一集往下切。

不满意能就地改。整份档案可以对着对话框调,想全改成中文一句话就够;单条人物、单个事件也能点开重写。改动会带着往下走,拆集和出片按新设定来。

连载的集间一致性

做连载时,下一集继承同一套风格和人物。定下的定妆照会带进后面几集的提示词和参考图,前后不一致因此少很多。

拍到后半段,主角忽然换脸,或者场景接不上,返工比重拍一集还贵。把人物和事件提前钉住,是最省事的办法。

三、风格包是外挂件

仓库里带了两套风格,一套叫上美影风,一套叫手绘白板。前者底下有五个分支,剪纸、敦煌重彩、水墨淡彩、石蓝淡墨和手绘平涂。选完分支不用自己拼长提示词,色盘、要避开的元素、风格描述由引擎按包里的定义塞进去。

风格包

手绘白板走文生视频,拿文字直接生成,没有把静态图硬转成动画。暖米黄纸面配深灰线条,讲知识、拆流程比较贴。

手绘白板风格

风格包没有塞进源码。加第三套,往 stylePacks 目录放一个包就行;风格中心也能贴 GitHub 技能地址,或者传 SKILL.md、传 zip。只给一段视觉描述让它自己长出一套包,同样支持。

做好的包能导出。整个项目搬到别的机器,风格跟着走。

四、把别人的片子拆成零件

分析页把一条成片拆回零件。抖音和 B 站的链接能贴,资产库里的本地文件也能选。

视频分析报告

链接先落地成文件,再统一抽帧、跑转写,整理出一份结构报告。报告里能看到开头怎么勾人、节奏怎么走、分镜怎么排、台词写了什么。文本端点勾上「能看图」后,抽出来的画面也一并送进去。

两份到四份报告能并排。同一选题下,几条片子分别在第几秒进正题、台词密不密、镜头切得急不急,摆一起差别很明显。

报告能直接转成复刻模板。模板留了槽位,把主题、人物、语言换掉,可以批量产新版本。也能导出成 JSON,换台机器再导回来。

用法上偏向借结构。别人怎么开场、信息按什么顺序给、钩子压在第几秒,值得抄。原片的文案、画面和创意直接搬会出事,模板也要看授权和平台规定。

外链不是每次都能下来。作者提过,主流渠道的视频全扒下来技术上做得到,但他拿不准对不许下载的内容动手有没有风险,就没做。碰上设了限制的片子,自己录屏再导进资产库。

五、开口只有一句话

打开之后第一屏没有工程列表,也没让人先建目录。正中间一个输入框,问想做什么视频。

首页的一句话输入框

念头写进去,挑好文本、图片、视频三类模型,再点一个风格,剩下的交给剧本、定妆、出片这条链。做到一半关掉不会消失,作品挂在任务中心,下次进来首页会提醒还有几条没出完,点一下接着做。

首页长成这样有原因。作者不想让人一进门就撞上节点和轨道,那几天把同类工具试了一圈,对新手来说不少地方过重。画布和时间线都留着,要改细节再进。

模型没配时,页面推人去模型页补端点,而不是丢一串报错。缺图片模型就提示补图片那一栏,指向很具体。

热点雷达

选题这一环有个雷达。联网文本模型配好后,它会去微博、抖音、B 站、知乎、小红书捞当下热的内容。看着合适点「做成视频」,话题被带回首页向导,先给制作方向,再往下走剧本、定妆、排队。

界面自己写着,热度是模型估的,跟平台官方榜没关系。拿来定方向可以,当数据报表用会失真。

六、要动刀才进画布

画布给要动手改的人。场景、分镜、分集、文本、配音、文生图、文生视频、ffmpeg 这几类节点能拖出来连成一条线,线的走向就是数据流向。整条能一次跑完,产物落回资产库。

画布

它跟前面几条流程通着。从首页向导、复刻模板、小说转短剧进来的项目,都能落到画布上接着改,前面产出的剧本、分镜、图、片段不会另存一份。

项目目录

项目在磁盘上就是一个目录,里面放流水线状态、画布快照和一个 project.vw.json,外加一个 export 目录存成片。位置能在项目页自己挑。

这个入口没有门槛。不走画布也能把片子做完,需要换素材、改分镜、单独重跑某个节点时再进来。

七、成片阶段的三件事

画面齐了进时间线。轨道分三种,画面一条,声音能叠好几条,字幕单独一条。速度在 0.5 到 2 倍之间调,进出画面能加淡入淡出。

时间线

轨道内容也能从画布直接装配过来,导出是 MP4,字幕压进画面一起出。

字幕与配音

字幕跟着成片自动挂上去。配音多一步,先挑音色、听一遍、确认了才铺到轨道上。麻烦一点,省掉了整条片子做完才发现声音不对的返工。厂商没接进来的标「未接入」,目录能看,试听和铺音用不了。

字幕还做了分辨率适配。口播按短句切开,沿镜头窗口铺开。ASS 文件按成片尺寸写 PlayRes,竖屏底下字幕不至于糊掉半个屏幕。

竖屏导出效果

竖屏默认 1080×1920,这个尺寸直接拿手机看效果就行。

八、素材、队列和账单

素材做久了必然乱。资产库把图、视频、音频、文本收进同一个本地目录,落盘路径按类型、年月、日期加标题加哈希排,库里只记相对路径。哪天想换资产库根目录,数据能跟着迁。

资产库

界面有网格和列表两种看法。筛选项按类型、用途、来源分,用途里有角色、场景、道具,来源里有 TTS、分析、复刻、流水线、画布、导入,标签和收藏另算。点开一条视频资产能直接接着走复刻。模型产出的图、声、片段也会回来,不用去文件夹里翻。

删之前会查引用。画布、时间线、复刻模板还用着的东西,不会无声无息消失。

任务中心

费时的活排进任务中心。雷达刷新、导出、索引、生成共用一条队列,进度能看,能取消,失败了能重试,页面关了任务照跑。队列落在 SQLite 里,进度走 WebSocket 推给前端,刷新记录还在。视频生成常要等几分钟,这页不显眼,但哪个在跑、哪个挂了、要不要重试,一眼看清。

模型不认厂商。文本、图片、视频、语音四类端点各自配,国内常用模型有预置,自定义的 OpenAI 兼容地址也收。地址和模型名都能改,密钥填完就能在节点里挑。

模型中心

已接的适配器有 DashScope 原生、豆包 Seedance、可灵,以及 OpenAI 兼容。四类分开配置,默认模型按能力指定,某个节点想换,在节点里单独覆盖。

密钥加密后写进本机的 SQLite,接口吐回来的时候做脱敏。整个项目没有账号体系,也就没有把密钥送到作者服务器这一步。

模型页会算账,最近 30 天里调用多少次、烧掉多少 tokens、出多少张图、生成多少秒视频、花多少钱,一栏一栏列着。单价会自动去拉,拉不到、或者实际拿到的价格比官方牌价低,可以手动填。

设置页很素,主题、中英文、资产库目录,三项。没有账号,没有会员。

九、装起来要几步

环境要求写在 README 里,Bun 1.2 往上。macOS 验证过;Linux 在 bun install 阶段会按平台补上 yt-dlp;Windows 作者手上没机器,兼容性不好打包票,可能有 bug。

开发态就三条命令。

git clone https://github.com/geekhome-lab/geekreel.git
cd geekreel
./scripts/dev.sh

跑完网页在 127.0.0.1 的 5473 端口,接口和 WebSocket 在 4780,开发态靠 Vite 把 /api 和 /ws 转过去。

想跑成品模式,仓库里那个 start.sh 会先把网页编出来,再由服务托管静态资源,浏览器直接访问 4780。端口用环境变量改,VW_HOST 和 VW_PORT 都认,ffmpeg 想换自带的二进制用 VW_FFMPEG。ffmpeg 和 ffprobe 走项目依赖,yt-dlp 按系统下,不看开发机 PATH 上装的是哪个版本。

第一次打开,先把文本、图片、视频三类端点配好,配音等要用再说。没密钥的页面会把人引到模型页。

磁盘上的数据分三处。配置目录 ~/.video-workbench/ 放 SQLite、加密密钥、风格包索引和雷达缓存;默认资产库在 ~/VideoWorkbench/,位置能在设置里换,换时允许把旧数据一起搬;项目目录存画布快照和流水线状态,成片落在 export 目录。

换机器就把仓库、配置目录、资产库一起搬过去。风格包提前导出成 zip,在新机器上重新导入。

十、仓库长什么样

仓库首页

前后端在同一个 monorepo 里。服务端在 apps/server,Bun 加 Hono,扛 REST 接口、WebSocket 和任务队列,同时兼着本地服务;界面在 apps/web,React 19 配 Vite 与 Tailwind。packages 按能力切,共八个,媒体处理、复刻模板、推送、视频分析、热点雷达、风格包、模型、流水线。风格包实体在 stylePacks 目录,脚本放 scripts,设计文档和截图放 docs。

切开的好处是加一个模型适配器、一条推送渠道或一套风格,不用回头动首页和时间线。

授权是 Unlicense,等于放进公有领域,怎么用都行。库是十月四号建的,写这篇时刚过十天,二十来个 Star,非常新。这篇介绍的还是初版,作者在文末留了一句,觉得有用点个 Star,有人玩就继续迭代。

仓库在 https://github.com/geekhome-lab/geekreel

文章目录
  1. 1. 一、整套东西只在本机跑
  2. 2. 二、先拆人物和事件,再拆集
  3. 3. 三、风格包是外挂件
  4. 4. 四、把别人的片子拆成零件
  5. 5. 五、开口只有一句话
  6. 6. 六、要动刀才进画布
  7. 7. 七、成片阶段的三件事
  8. 8. 八、素材、队列和账单
  9. 9. 九、装起来要几步
  10. 10. 十、仓库长什么样