Skip to content

DAG 管道

rust-srec 使用 有向无环图(DAG) 系统进行后处理工作流。

什么是 DAG 管道?

DAG 管道定义一系列带依赖关系的处理步骤。步骤在可能时并行执行,但遵循依赖顺序。

管道触发器 (Pipeline Triggers)

rust-srec 的强大之处在于其自动化的触发机制。您可以根据需求在不同阶段触发管道:

1. 分段管道 (Segment Pipeline)

  • 触发时机:单个视频分段(.flv, .ts)或弹幕文件(.xml, .json)下载完成后。
  • 典型用途:转封装(Remux)、视频截图、弹幕格式转换。
  • 输入:单个文件。

2. 配对分段管道 (Paired Segment Pipeline)

  • 触发时机:当同一索引(Index)的 视频分段弹幕文件 都下载完成,且各自的分段管道执行成功后。
  • 典型用途:将弹幕烧录进视频(Burn-in)、合并分段信息。
  • 输入:对应的视频文件 + 弹幕文件。

3. 会话完成管道 (Session Complete Pipeline)

  • 触发时机:整个直播会话结束(主播离线),且该会话所有分段的所有前期管道(Segment & Paired)都已成功执行。
  • 典型用途:全会话合并、上传到云盘(如 Rclone 到 Google Drive/OneDrive)、发送最终完成通知。
  • 输入:该会话产生的所有最终产物列表。

内置处理器 (Processors)

每个管道步骤由一个专门的处理器执行:

处理器 ID功能核心参数
remux转封装,不改变编码format (mp4, mkv...)
danmaku_factory弹幕转换output_format (ass)
burn_in视频+弹幕硬烧录video_path, subtitle_path
thumbnail提取视频关键帧作为封面timestamp, width, height
rclone云端同步remote, path, args
tdl_upload具体的上传工具支持args
metadata写入元数据(nfo, json)-
delete自动清理中间文件-
execute执行自定义 Shell 脚本command, args

预设系统 (Presets)

为了提高效率,系统提供了两种预设:

  • Job Preset (任务预设):针对单个步骤的配置模板(如“1080p 封面提取”)。
  • Pipeline Preset (管道预设):完整的 DAG 工作流定义(如“B站标准录制流程”)。

高级特性

任务并行与依赖 (Fan-in / Fan-out)

DAG 系统支持复杂的拓扑结构。例如,您可以让 remuxthumbnail 并行运行,而 upload 步骤则等待这两者全部成功后才开始(扇入)。

自动清理

通过在 DAG 末尾添加 delete 步骤,并将其 depends_on 设置为 upload,您可以实现“上传成功后自动删除源文件”的安全清理逻辑。

性能建议

重编码(如 burn_in)是极其消耗 CPU 的。建议在 cpu_pool 中限制较小的并发数,以防止系统负载过高影响下载稳定性。