feat: 统一渲染引擎 + 打通一键生成全链路 #202
Reference in New Issue
Block a user
Delete Branch "feature/unified-rendering-and-pipeline"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
变更概述
实现统一渲染引擎(UnifiedRenderService),替换原有的 EditingModeProcessor 分发和 concat demuxer 简单拼接,打通一键生成视频的完整链路。
核心变更
1. 提取共享工具模块
video_processing/ffmpeg_utils.py— FFmpeg 工具函数video_processing/oss_helpers.py— OSS 工具函数video_processing/dedup_helpers.py— 查重辅助函数2. 实现 UnifiedRenderService
3. 重构 render_edit_plan() + generate_video()
4. 测试覆盖
铁律(灵应)
PR #202 代码审计报告
结论:✅ 通过(0 P0 / 0 P1 / 0 P2 / 4 P3)
一、总体评价
质量很高的架构重构 PR。统一渲染引擎设计思路清晰,彻底解决了"四种模式各一套代码"的维护难题。共享模块提取合理,测试覆盖充分,全链路打通完整。
二、设计原则核对 ✅ 全部符合
_resolve_layer_role只看 clip_type 和 config.role,无 mode 判断_build_plan_and_clips_from_task在生成虚拟 plan 时决定结构三、问题清单(均为 P3 建议,不阻塞合并)
P3-1:editing_modes.py 已成死代码,建议清理
apps/worker/video_processing/editing_modes.pyP3-2:
_build_filter_complex中 clip 索引查找效率 O(n²)apps/worker/video_processing/unified_render_service.pylayer_clip_indices = [all_clips.index(c) for c in layer.clips]list.index()查找,整体 O(n²)。虽然 clip 数量通常不大(几十个以内),但用字典预映射更规范。clip_id → index的字典,O(1) 查找。P3-3:素材原声全部丢失,ONE_TAKE 模式可考虑保留首素材音频
apps/worker/video_processing/unified_render_service.py→_execute_ffmpeg-map [final_video],不处理任何音频轨。所有模式下素材原声全部丢失,依赖外部配音后处理混音。和老代码行为一致(老代码 normalize_video 用了-an),不是 regression,但 ONE_TAKE 模式下保留首个素材原声可能是更自然的默认行为。preserve_source_audio配置,ONE_TAKE 模式默认开启。P3-4:图层 z_index 命名有歧义,与实际合成顺序不完全一致
apps/worker/video_processing/unified_render_service.py_LAYER_Z_INDEX常量 +_build_filter_complexStep 3四、做得好的地方 👏
%s传参)、nosec 标注合理、docstring 完整、分区注释清晰。五、安全审查
六、性能考量
综合结论:可合并。4个P3均为建议优化项,不影响功能正确性和上线。