Skip to content

视频合成预设功能实现说明

功能描述

在前端添加"高质量导出"选项,让用户可以选择不同的 FFmpeg preset:

  • ⚡ 快速合成:veryfast(默认)
  • 🎬 高质量导出:medium(后台任务,完成后通知)

已完成的功能

1. 后端功能实现

  • ✅ API 控制器支持 preset 参数传递(McpController.php)
  • ✅ PyBridge 服务接收并使用 preset 参数(fastapi_app.py, ffmpeg_runner.py)
  • ✅ FFmpeg 命令根据 preset 参数调整编码设置
  • ✅ 默认预设从 ultrafast 调整为 veryfast(平衡速度和质量)

2. 调试日志清理

  • ✅ 移除 McpController.php 中的调试日志代码
  • ✅ 清理临时调试文件写入操作

3. OSS 上传功能

  • ✅ PyBridge 生成视频成功后自动上传到 OSS
  • ✅ 返回预签名 URL 用于视频预览
  • ✅ 配置了 OSS 相关环境变量(OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET, OSS_BUCKET, OSS_ENDPOINT, ENABLE_OSS_UPLOAD)

待完成的功能

1. 前端实现

  • [ ] 在视频合成界面添加 preset 选择器(radio button 或 dropdown)
  • [ ] 修改 API 调用逻辑,传递 preset 参数到后端
  • [ ] 实现高质量导出的进度反馈机制
  • [ ] 添加任务完成通知功能

2. 前端代码修改示例

需要在前端调用 compose_timeline_ffmpeg 工具时添加 preset 参数:

javascript
// 示例调用
const result = await mcp.callTool({
  tool: 'compose_timeline_ffmpeg',
  args: {
    storyboard_id: storyboardId,
    timeline_json: timelineJson,
    options: {
      // ... 其他选项
    },
    preset: selectedPreset, // 'veryfast' 或 'medium'
    agent_app_id: agentAppId,
    agent_id: agentId,
    member_id: memberId
  }
});

3. UI 控件示例

在视频合成界面添加一个选择器(radio button 或 dropdown):

html
<div class="preset-selector">
  <label>
    <input type="radio" name="preset" value="veryfast" checked> 
    ⚡ 快速合成(默认)
  </label>
  <label>
    <input type="radio" name="preset" value="medium"> 
    🎬 高质量导出
  </label>
</div>

技术实现细节

PyBridge 预设支持

  • CPU 模式:支持 ultrafast, superfast, veryfast, faster, fast, medium, slow
  • GPU 模式:支持 h264_nvenc 编码器的相关预设

性能考虑

  • medium 预设会显著增加编码时间,但提供更好的压缩效率和画质
  • 建议对长时间任务提供进度反馈和完成通知

OSS 上传配置

OSS 配置已就绪,PyBridge 会在视频生成成功后自动上传到阿里云 OSS 并返回预签名 URL,确保视频可以快速访问而无需等待 Nginx 静态文件服务的缓慢响应。