Files
xiaoxia-saas/1197_preview_generation_proposal.md
xiaoxia e27a48f0e0
CI/CD Pipeline / Check if frontend-only change (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Has been skipped
CI/CD Pipeline / PR Build API Image (push) Has been skipped
CI/CD Pipeline / PR Build Web Image (push) Has been skipped
CI/CD Pipeline / PR Build Worker Image (push) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (push) Successful in 1m16s
CI/CD Pipeline / Validate - Type Check (mypy) (push) Successful in 1m38s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 2m44s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 3m17s
CI/CD Pipeline / Validate - Code Quality (push) Successful in 3m29s
CI/CD Pipeline / Integration Tests (push) Successful in 1m40s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 6m29s
CI/CD Pipeline / Unit Tests (push) Successful in 8m8s
CI/CD Pipeline / Build Production API Image (push) Has been skipped
CI/CD Pipeline / Build Production Worker Image (push) Has been skipped
CI/CD Pipeline / CI Gate (push) Has been skipped
CI/CD Pipeline / Build Production Web Image (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Build Staging API Image (push) Successful in 14m13s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 47s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 47s
CI/CD Pipeline / Staging E2E Tests (push) Successful in 2m8s
CI/CD Pipeline / Staging API Integration Tests (push) Successful in 2m59s
CI/CD Pipeline / Canary Release to Production (push) Has been skipped
feat: implement POST /assets/smart-match endpoint (#1242)
Co-authored-by: xiaoxia <dev@xiaoxiajianji.com>
Co-committed-by: xiaoxia <dev@xiaoxiajianji.com>
2026-08-05 09:51:01 +08:00

7.7 KiB
Raw Permalink Blame History

AIGC
AIGC
Label ContentProducer ProduceID ReservedCode1 ContentPropagator PropagateID ReservedCode2
1 001191110102MACQD9K64018705 15868733686388_0/project_7655981463858544923-files/docs/1197_preview_generation_proposal.md 001191110102MACQD9K64028705 15868733686388#1785468313901

#1197 预览生成接口方案评估

背景

智能剪辑「一键生成」流程中,第3步预览生成当前被跳过,直接进入下一步。需要实现真正的预览生成功能,让用户在正式生成前能看到效果预览。

现状分析

现有生成链路

API 触发生成 → GenerationTask入库 → Celery异步任务 → UnifiedRenderService渲染 → OSS上传 → 更新状态

关键节点:

  1. API层POST /generation-tasksPOST /templates/{id}/generate 触发生成
  2. 任务调度Celery task worker.generate_video
  3. 渲染引擎UnifiedRenderService(统一渲染引擎,已接入9个效果层)
  4. 输出配置:默认 720p (1280x720),支持 resolution 字段自定义
  5. 产物存储GeneratedVideo 表记录,OSS 存储视频文件

已有可复用能力

能力 位置 是否可复用
任务创建与状态管理 GenerationTask + CreateGenerationTaskUseCase
素材下载与预处理 _download_video_assets / _download_voice_asset
统一渲染引擎 UnifiedRenderService
分辨率配置 resolution 字段已支持
混音与后处理 _render_video 内流程
OSS 上传与查重 _upload_and_dedup
进度追踪 append_log / progress 字段

方案对比

方案A:复用现有生成链路 + is_preview 标记(推荐)

思路:在现有 GenerationTask 上加 is_preview 标记,预览生成走完整链路但参数降级。

改动点:

  1. 数据模型GenerationTaskis_preview: bool 字段(默认 false);GeneratedVideois_preview: bool
  2. API 层:生成接口加 is_preview 参数,预览任务不计入配额
  3. 渲染参数:预览模式下自动调整
    • 分辨率:480p (854x480)
    • 时长:限制前 15 秒(或模板第一个片段)
    • 码率:降低至 1.5Mbps(正式 4Mbps
    • 效果层:跳过高级转场/粒子特效等耗时效果
  4. 任务调度:预览任务走低优先级队列(或复用现有队列,标记优先级)
  5. 前端对接:预览生成结果带 is_preview=true 标记,前端展示"预览"标签

优点:

  • 代码复用率 90%+,改动最小
  • 与正式生成逻辑一致,预览效果真实可信
  • 进度查询、结果展示等功能直接复用
  • 后续可平滑升级:预览满意后一键转正式生成

缺点:

  • 需要区分预览和正式任务,避免数据混淆
  • 预览任务和正式任务竞争同一队列资源(可后续优化为独立队列)

开发量估算2-3 天

  • 数据模型 + 迁移:0.5 天
  • API 层改造:0.5 天
  • 渲染参数降级:1 天
  • 测试 + 联调:1 天

方案B:新建独立预览接口 + 轻量渲染逻辑

思路:新建独立的预览生成接口,使用简化的渲染逻辑(如只拼接素材+基础配音,跳过大部分效果)。

改动点:

  1. 新增 PreviewTask 数据模型
  2. 新增 POST /api/v1/preview/generate 接口
  3. 新增独立的 Celery task worker.generate_preview
  4. 简化渲染流程:只做素材裁剪+拼接+配音,跳过转场/滤镜/字幕特效等

优点:

  • 完全隔离,不影响正式生成链路
  • 可以做极致优化,预览生成速度快
  • 数据模型清晰,不会混淆

缺点:

  • 代码重复率高,两套生成逻辑维护成本翻倍
  • 预览效果与正式生成可能不一致(效果层差异)
  • 前端需要对接两套接口
  • 无法从预览升级为正式生成(需重新走完整流程)

开发量估算4-5 天

  • 数据模型 + 接口:1 天
  • 简化渲染逻辑:2 天
  • 测试 + 联调:1-2 天

方案C:图片预览(首帧/关键帧截图)

思路:不生成视频,只生成几张关键帧的预览图片。

优点:

  • 生成速度极快(秒级)
  • 资源消耗小

缺点:

  • 预览效果差,用户无法感知动态效果
  • 无法验证配音、转场、节奏等时间维度的效果
  • 用户体验不佳,不如"真预览"有说服力

开发量估算1-2 天


推荐方案:方案A(复用现有生成链路)

核心理由

  1. 效果保真:预览和正式生成用同一套渲染引擎,效果一致,用户信任度高
  2. 开发效率90% 代码复用,2-3 天可上线
  3. 可扩展性强:后续可加「预览转正式」「低分辨率快速预览」等增强功能
  4. 维护成本低:一套生成逻辑,bug 修复和新功能同时生效

详细设计

1. 数据模型变更

# GenerationTask 新增字段
is_preview: bool = False
"""是否为预览生成"""

preview_of: str = ""
"""预览对应的正式任务 ID(或反向关联)"""

# GeneratedVideo 新增字段
is_preview: bool = False
"""是否为预览视频"""

迁移alembic 新增 migration,两个表各加 1-2 个字段。

2. API 层

POST /api/v1/generation-tasks
  Body 增加 is_preview: bool = false
  
POST /api/v1/templates/{id}/generate
  Query 增加 is_preview: bool = false

配额处理:预览生成不计入用户配额,不占用生成次数限制。

3. 渲染参数降级

参数 正式生成 预览生成
分辨率 720p (1280x720) 480p (854x480)
码率 4 Mbps 1.5 Mbps
时长 完整时长 前 15 秒(或第一段)
帧率 30 fps 24 fps
转场效果 完整转场 仅淡入淡出(或简单切)
特效滤镜 全部启用 跳过粒子/光效等高级效果
字幕 完整渲染 正常渲染(字幕是核心信息)
配音 完整混音 正常混音(配音是核心信息)

实现方式:在 _render_video 或 UnifiedRenderService 入口处,根据 is_preview 标记调整渲染配置。

4. 任务调度

  • 初期复用现有队列,预览任务正常排队
  • 后续如需优化,可拆分独立预览队列(低优先级)
  • 预览任务可设置较短超时时间

5. 前端对接

  • 调用生成接口时传 is_preview=true
  • 结果列表中预览视频带「预览」标签
  • 预览满意后可一键「升级为正式生成」(重新触发全分辨率生成,可复用素材下载缓存)

实施步骤

Phase 1MVP2天):

  1. 数据模型 + 迁移
  2. API 层支持 is_preview 参数
  3. 渲染分辨率降级(480p
  4. 不计入配额
  5. 基础测试

Phase 2(优化,1-2天):

  1. 时长限制(前15秒)
  2. 效果层降级(跳高级效果)
  3. 预览任务低优先级队列
  4. 预览转正式生成功能

与前端对齐点

  1. 预览生成的触发时机(第3步自动生成?用户点击才生成?)
  2. 预览时长是固定15秒还是完整但低清?
  3. 是否需要「预览转正式生成」功能
  4. 预览视频的展示形态(和正式视频一样还是有特殊UI)

风险与注意事项

  1. 数据混淆:确保统计、计费、列表展示时正确区分预览和正式任务
  2. 存储成本:预览视频也占 OSS 空间,可设置自动清理(7天后自动删除)
  3. 用户预期:要明确告诉用户这是预览,效果和正式生成一致但清晰度低
  4. 并发压力:如果用户频繁生成预览,可能增加系统负载,需要限流

本内容由 Coze AI 生成,请遵循相关法律法规及《人工智能生成合成内容标识办法》使用与传播。