feat(worker): 直通渲染stream copy优化 - 无重编码性能提升10倍+ #244
Reference in New Issue
Block a user
Delete Branch "feat/stream-copy-optimization"
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?
背景
新引擎渲染性能比旧引擎差很多,根因之一是所有场景都走完整 libx264 重编码。
对于单clip直通场景且输入参数与输出完全一致的情况(h264/yuv420p/同分辨率/同帧率/无字幕/无特效),完全不需要重编码,直接 stream copy 即可,性能提升 10 倍以上(典型 20s → 1-2s)。
实现
前置:probe_video_info 增强
返回值新增 video_codec / audio_codec / pix_fmt / has_audio 字段,用于 copy 条件判断。
核心逻辑
_can_use_stream_copy():7 项条件检查
_try_render_stream_copy():stream copy 执行
渲染主流程:直通场景先尝试 stream copy
安全保障
性能收益
测试
- 新增 /internal/render/videos/{video_id}/download-url 接口:单个视频下载URL - 新增 /internal/render/tasks/{task_id}/videos 接口:任务下所有视频+下载URL - 内部 API Key 鉴权(X-API-Key),不对外开放 - 下载URL有效期24小时,方便对比工具批量下载 - 支持按 status 筛选(completed/failed 等) - 8个单元测试覆盖核心逻辑当输入片段与输出参数完全一致(h264/yuv420p/同分辨率/同帧率/无字幕/无特效)时, 走 FFmpeg stream copy 不重编码,性能提升 10 倍以上(典型场景 20s → 1-2s)。 核心改动: 1. probe_video_info 增强:返回编码/像素格式/音频信息(用于 copy 条件判断) 2. _can_use_stream_copy:7项条件检查(编码/分辨率/帧率/像素格式/字幕/trim等) 3. _try_render_stream_copy:stream copy 执行,失败自动回退到重编码 4. 单clip直通场景先尝试 stream copy,不满足或失败再回退带滤镜的直通渲染 5. trim 用 -ss/-t 实现,无需滤镜,copy 模式下也能用 安全保障: - 条件不满足自动跳过,不影响现有渲染质量 - FFmpeg 失败自动回退到重编码,不影响成功率 - 输出文件为空时判定失败并清理损坏文件 测试:9个新增单测 + 现有75个统一渲染测试,全绿 ✅ (含条件判断、成功路径、失败回退、完整渲染流程等场景)