项目解耦 3.2 KB

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