feat: 多轨道混音 + 字幕渲染引擎 + 视频拼接(后端) #312
Reference in New Issue
Block a user
Delete Branch "feat/multi-track-mix-subtitle-concat"
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?
三个渲染能力后端实现
1. 多轨道混音(multi_track_mixer.py)
2. 字幕渲染引擎(subtitle_render_engine.py)
build_subtitles_from_plan+build_subtitle_filter3. 视频拼接引擎(concat_engine.py)
接入方式
render_audio.py:mix_audio新增audio_tracks_config参数,在 BGM 混音之后应用unified_render_service.py:从plan.config.audio_tracks读取配置,零侵入数据模型测试
安全审计报告 - PR #312 多轨道混音 + 字幕渲染引擎 + 视频拼接
结论:⚠️ 有条件通过(需修复 P1 问题后方可合并)
🔴 P0(致命)
无。所有 FFmpeg 调用均通过
run_ffmpeg使用列表参数,不存在命令注入。🟠 P1(高危 — 必须修复)
1. multi_track_mixer.py: audio_path 无路径安全校验
AudioTrack.from_dict中audio_path直接从用户配置读取,无路径校验plan.config.audio_tracks.tracks[].audio_path传入任意文件路径2. concat_engine.py: video_path 无路径安全校验
ConcatSegment.from_dict中video_path同理,无任何路径安全校验3. multi_track_mixer.py: 无轨道数量上限
from_config_dict不限制 tracks 数量,可传入成百上千轨道MAX_TRACKS = 16,超过则截断告警4. concat_engine.py: 无拼接段数上限
segments无数量上限,concat filter 模式下内存线性增长MAX_SEGMENTS = 50🟡 P2(中危 — 建议修复)
[]_concat_filter约 100 行死代码(前半部分全部 clear 掉)🟢 P3(优化建议)
tempfile、typing.Any导入未使用✨ 亮点
📋 修复优先级 Top 5
完整报告已上传至项目 docs/ 目录