| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- 现在项目要进行结构上的解耦,将整体流程拆分为3个板块:
- 第一个是AI文字部分,主要负责协调数据源和生成基础JSON,比如对于github-trending这个模板来说,它要:
- 1. 读取各个仓库的README及其他基本数据,生成单个仓库的描述
- 2. 根据上一步的结果总结内容,获取首屏或者一些全局描述相关的内容
- 3. 根据步骤1、步骤2生成章节台词内容
- 4. 视频发布所需的配置信息应该在本阶段生成(标题、描述、标签、板块等)
- 另外,数据源与AI文字逻辑在模块内需要拆分开,为以后可能的混合数据源做准备,之后可能会有混合多个数据源去生成视频的需求
- 然后是AI音频部分,需要读取AI文字部分中生成的JSON中的caption_origin来生成音频,然后根据生成的音频拆分为字幕数组(文字、所需时长)。整个AI音频部分就是通过遍历AI文字部分中生成的JSON来执行上述步骤,并将结果合并到JSON
- 最后是remotion调度器,remotion调度器也是接收固定的JSON类型(其实每个步骤都是,不满足JSON类型要报错),然后遍历JSON下载所有音频(文件命名要根据JSON字段path来命名(共用工具函数)),下载完毕后,合并到JSON
- 然后调用指定的remotion模板,消费JSON,根据模板生成视频。最终将生成好的视频上传到OSS。调用模板生成视频这里需要有方便的方法进行调试(remotion应该提供直接预览模板的方法),这样开发新模板便不再需要跑完整流程。
- 以下是JSON模板的参考示例,可根据实际情况进行调整:
- interface Input {
- // 数据结构版本
- version: "2.0";
- // 数据类型(后面可能非ppt形式表达)
- type: "ppt";
- // 全局配置
- config?: {
- // 主题色
- theme_color?: string;
- // 背景音乐
- bgm_file_url?: string;
- // ...
- };
- data: Array<{
- title?: string;
- desc?: string;
- // 本段落完整字幕
- caption_origin?: "你好,我叫张三";
- // 拆分后字幕
- caption?: {
- text: string;
- // 需要占用的时长
- duration: number;
- }[];
- // 音频文件url
- caption_audio_file_url?: "";
- card_list?: {
- title: "";
- desc: "";
- // ...
- }[];
- //
- menu?: {
- icon?: "";
- title: "";
- desc: "";
- // ...
- }[];
- }>;
- }
- 这些只是项目流程上的变更,我不希望上面的变更会影响视频生成结果。所有的功能,以github-trending这个模板为准,目的是为项目提供更多扩展上的可能。
- 基于以上流程,我们或许需要一个新的程序运行方式,该运行方式主要是以后端服务的方式运行,而不是CLI或webui。更适配容器化的运行方式,原生支持定时执行。该程序运行方式将是pipeline的主要运行方式,暂时不考虑CLI或webui的兼容性和可用性。另外或许我们之后还要考虑并发问题,这个可以不做,在架构上保留这种能力
- 这次改动非常大,应该基本相当于重构了,CLAUDE.md也需要大范围改动甚至重写
- 检查当下的项目结构与新结构是否有逻辑上的矛盾冲突,如果有,及时告知我;如果没有,请规划后开始进行调整
|