Skip to content

一键优化功能使用指南

功能概述

一键优化是基于视频质量评分的自动化视频增强系统,能够根据质量评分的建议自动执行超分辨率(Upscale)和插帧(Frame Interpolation)处理,显著提升视频质量。

核心特性

  • 智能决策:根据质量评分的各维度得分自动判断是否需要超分/插帧
  • 多种算法:支持 FFmpeg、Real-ESRGAN、Waifu2x(超分)和 RIFE(插帧)
  • 质量对比:优化前后质量评分对比,直观展示提升效果
  • 进度追踪:实时显示超分和插帧步骤的执行状态
  • 灵活配置:支持自定义超分倍数、目标帧率等参数

工作流程

合成视频 → 质量评分 → 一键优化 → 超分/插帧 → 重新评分 → 质量对比

详细步骤

  1. 视频合成:使用 FFmpeg 合成分镜视频
  2. 质量评估:自动对合成视频进行 5 维度质量评分
  3. 分析建议:系统生成优化建议(如"建议超分提升分辨率"、"建议插帧提升流畅度")
  4. 点击优化:用户点击"一键优化"按钮
  5. 自动处理
    • 根据建议判断是否需要超分(分辨率得分 < 75)
    • 根据建议判断是否需要插帧(流畅度得分 < 70)
    • 依次执行超分和插帧处理
  6. 重新评分:对优化后的视频重新评分
  7. 质量对比:展示优化前后的分数对比和等级变化

使用方法

前端界面操作

1. 合成视频并获得质量评分

javascript
// 开始合成
await start()

// 合成完成后,自动显示质量评分卡片
// 包含:
// - 综合评分(0-100)
// - 质量等级(S/A/B/C/D)
// - 5维度得分条
// - 优化建议列表

2. 点击一键优化

质量评分卡片底部会显示**"✨ 一键优化"**按钮:

vue
<el-button type="primary" @click="autoEnhance">
  ✨ 一键优化
</el-button>
<div>根据建议自动执行超分/插帧</div>

3. 监控优化进度

点击后会显示优化进度卡片:

⚡ 优化进度

✅ 超分处理
   FFmpeg 超分完成 (1280x720 -> 2560x1440)

🔄 插帧处理
   (进行中...)

4. 查看优化结果

优化完成后显示质量对比:

✨ 优化后质量对比

优化前          →          优化后
  72                        86
  B 级                      A 级

🚀 提升 14.0 分

配置参数

默认配置

javascript
enhancePreferences: {
  upscale_method: 'ffmpeg',        // 超分方法
  interpolate_method: 'ffmpeg',    // 插帧方法
  scale_factor: 2.0,               // 缩放倍数
  target_fps: 60                   // 目标帧率
}

可选超分方法

方法说明依赖速度质量
ffmpegFFmpeg Lanczos 算法⚡⚡⚡⭐⭐⭐
realesrganReal-ESRGAN AI 模型realesrgan-ncnn-vulkan⚡⚡⭐⭐⭐⭐⭐
waifu2xWaifu2x(动漫优化)waifu2x-ncnn-vulkan⚡⚡⭐⭐⭐⭐

可选插帧方法

方法说明依赖速度质量
ffmpegFFmpeg minterpolate⚡⚡⚡⭐⭐⭐
rifeRIFE AI 模型rife-ncnn-vulkan⚡⚡⭐⭐⭐⭐⭐

API 接口

一键优化接口

端点POST /postprocess/auto-enhance

请求参数

json
{
  "video_path": "/path/to/video.mp4",
  "quality_score": {
    "overall_score": 72,
    "grade": "B",
    "dimensions": {
      "sharpness": 75,
      "brightness": 80,
      "contrast": 70,
      "resolution": 65,
      "motion_smoothness": 68
    },
    "suggestions": [
      "建议超分提升分辨率到 1080p 或更高",
      "建议插帧提升流畅度到 60fps"
    ]
  },
  "preferences": {
    "upscale_method": "ffmpeg",
    "interpolate_method": "ffmpeg",
    "scale_factor": 2.0,
    "target_fps": 60
  }
}

响应

json
{
  "job_id": "enhance_20231215182030_1234",
  "accepted": true
}

查询任务状态

端点GET /jobs/{job_id}

成功响应

json
{
  "job_id": "enhance_20231215182030_1234",
  "status": "success",
  "media_path": "/tmp/enhance_xxx/enhanced_final.mp4",
  "quality_before": {
    "overall_score": 72,
    "grade": "B"
  },
  "quality_after": {
    "overall_score": 86,
    "grade": "A"
  },
  "steps": [
    {
      "type": "upscale",
      "result": {
        "success": true,
        "message": "FFmpeg 超分完成 (1280x720 -> 2560x1440)",
        "output": "/tmp/enhance_xxx/enhanced_upscaled.mp4"
      }
    },
    {
      "type": "interpolate",
      "result": {
        "success": true,
        "message": "FFmpeg 插帧完成 (30fps -> 60fps)",
        "output": "/tmp/enhance_xxx/enhanced_final.mp4"
      }
    }
  ],
  "message": "完成 2/2 个增强步骤"
}

技术实现

后端模块

VideoEnhancer 类

位置:/pybridge/src/bridge/video_enhancer.py

核心方法

python
class VideoEnhancer:
    @staticmethod
    def upscale_video(input_path, output_path, method='ffmpeg', scale_factor=2.0):
        """超分辨率处理"""
        # FFmpeg Lanczos 算法
        if method == 'ffmpeg':
            return VideoEnhancer._upscale_ffmpeg(...)
        # Real-ESRGAN AI 模型
        elif method == 'realesrgan':
            return VideoEnhancer._upscale_realesrgan(...)
        # Waifu2x(动漫优化)
        elif method == 'waifu2x':
            return VideoEnhancer._upscale_waifu2x(...)
    
    @staticmethod
    def interpolate_video(input_path, output_path, method='ffmpeg', target_fps=60):
        """插帧处理"""
        # FFmpeg minterpolate
        if method == 'ffmpeg':
            return VideoEnhancer._interpolate_ffmpeg(...)
        # RIFE AI 模型
        elif method == 'rife':
            return VideoEnhancer._interpolate_rife(...)
    
    @staticmethod
    def auto_enhance(input_path, output_dir, quality_score, preferences=None):
        """自动增强 - 根据质量评分智能决策"""
        # 分析建议
        need_upscale = False
        need_interpolate = False
        
        for suggestion in quality_score.get('suggestions', []):
            if '分辨率' in suggestion or '超分' in suggestion:
                need_upscale = True
            if '帧率' in suggestion or '插帧' in suggestion or '流畅' in suggestion:
                need_interpolate = True
        
        # 也可基于维度分数判断
        dimensions = quality_score.get('dimensions', {})
        if dimensions.get('resolution', 100) < 75:
            need_upscale = True
        if dimensions.get('motion_smoothness', 100) < 70:
            need_interpolate = True
        
        # 依次执行超分和插帧
        steps = []
        current_video = input_path
        
        if need_upscale:
            upscale_result = VideoEnhancer.upscale_video(...)
            steps.append({'type': 'upscale', 'result': upscale_result})
            if upscale_result['success']:
                current_video = upscale_result['output']
        
        if need_interpolate:
            interpolate_result = VideoEnhancer.interpolate_video(...)
            steps.append({'type': 'interpolate', 'result': interpolate_result})
            if interpolate_result['success']:
                current_video = interpolate_result['output']
        
        return {
            'success': len([s for s in steps if s['result']['success']]) > 0,
            'steps': steps,
            'final_video': current_video
        }

前端组件

位置:/web/src/views/aigc/component/components/FFmpegComposeDialog.vue

关键数据字段

javascript
data() {
  return {
    qualityScore: null,           // 优化前质量评分
    qualityAfter: null,           // 优化后质量评分
    isEnhancing: false,           // 是否正在优化
    enhanceJobId: '',             // 优化任务 ID
    enhanceSteps: [],             // 优化步骤列表
    enhancePreferences: {         // 优化配置
      upscale_method: 'ffmpeg',
      interpolate_method: 'ffmpeg',
      scale_factor: 2.0,
      target_fps: 60
    }
  }
}

核心方法

javascript
async autoEnhance() {
  // 1. 验证视频 URL 和质量评分
  if (!this.mediaUrl || !this.qualityScore) return
  
  // 2. 调用 MCP 工具
  const payload = {
    tool: 'auto_enhance_video',
    args: {
      video_path: this.mediaUrl,
      quality_score: this.qualityScore,
      preferences: this.enhancePreferences
    }
  }
  const res = await mcpCallTool(payload)
  this.enhanceJobId = res.data.job_id
  
  // 3. 轮询任务状态
  this.pollEnhance()
}

async pollEnhance() {
  const interval = setInterval(async () => {
    const res = await mcpGetJob(this.enhanceJobId)
    
    // 更新步骤和质量评分
    this.enhanceSteps = res.data.steps
    this.qualityAfter = res.data.quality_after
    
    // 任务完成
    if (res.data.status === 'success') {
      this.mediaUrl = res.data.media_path  // 更新为优化后的视频
      this.qualityScore = this.qualityAfter  // 更新为优化后的评分
      clearInterval(interval)
    }
  }, 2000)
}

优化决策逻辑

触发条件

系统根据以下条件自动判断是否需要超分或插帧:

超分触发条件(满足任一)

  1. 建议关键词:优化建议中包含"分辨率"、"超分"等关键词
  2. 分辨率得分:resolution 维度得分 < 75

插帧触发条件(满足任一)

  1. 建议关键词:优化建议中包含"帧率"、"插帧"、"流畅"等关键词
  2. 流畅度得分:motion_smoothness 维度得分 < 70

处理顺序

  1. 先超分:提升分辨率(如 720p → 1440p)
  2. 后插帧:提升帧率(如 30fps → 60fps)

这样的顺序可以确保插帧基于更高质量的画面进行,获得更好的效果。

性能优化建议

1. 选择合适的方法

  • 快速处理:使用 ffmpeg 方法(无需额外依赖,速度快)
  • 高质量输出:使用 AI 模型(Real-ESRGAN、RIFE)

2. 合理设置参数

  • 超分倍数

    • 1.5x:轻度提升,速度快
    • 2.0x:常规提升,平衡质量和速度
    • 4.0x:大幅提升,速度慢
  • 目标帧率

    • 30fps:常规视频
    • 60fps:流畅视频(推荐)
    • 120fps:高刷视频(仅专业需求)

3. 分步处理

如果视频文件较大,建议:

  1. 先执行超分,查看效果
  2. 满意后再执行插帧

可以通过修改 preferences 参数来控制。

常见问题

Q1: 一键优化按钮不可用?

原因:缺少质量评分数据

解决:确保视频合成时启用了质量评分功能(enable_quality_score: true

Q2: 优化任务失败?

可能原因

  1. 视频文件路径无效(OSS URL 暂不支持,需要本地路径)
  2. FFmpeg 未安装或版本过低
  3. AI 模型工具未安装(realesrgan、waifu2x、rife)

解决

  • 检查视频路径是否有效
  • 使用 ffmpeg 方法(默认)
  • 安装所需的 AI 工具(可选)

Q3: 优化后质量评分反而降低?

原因

  • 超分/插帧算法可能引入伪影
  • 评分算法基于统计分析,可能不完全反映主观感受

建议

  • 调整超分倍数(降低到 1.5x)
  • 尝试不同的方法(FFmpeg vs AI 模型)
  • 以实际观看效果为准

Q4: 处理时间过长?

优化方案

  • 使用 FFmpeg 方法(比 AI 模型快 3-5 倍)
  • 降低超分倍数(2.0x → 1.5x)
  • 降低目标帧率(60fps → 30fps)
  • 考虑使用 GPU 加速(AI 模型)

完整示例

示例 1:基本使用

javascript
// 1. 合成视频并获得质量评分
await start()

// 等待合成完成...

// 2. 点击一键优化
await autoEnhance()

// 优化配置使用默认值:
// - 超分方法:FFmpeg Lanczos
// - 插帧方法:FFmpeg minterpolate
// - 超分倍数:2.0x
// - 目标帧率:60fps

示例 2:自定义配置

javascript
// 修改优化配置
this.enhancePreferences = {
  upscale_method: 'realesrgan',   // 使用 Real-ESRGAN
  interpolate_method: 'rife',     // 使用 RIFE
  scale_factor: 4.0,              // 4倍超分
  target_fps: 60                  // 60fps
}

// 执行优化
await autoEnhance()

示例 3:仅超分(不插帧)

通过修改触发条件,可以实现仅执行超分:

python
# 在 auto_enhance 方法中
need_upscale = True
need_interpolate = False  # 强制不插帧

总结

一键优化功能提供了智能、自动化的视频质量提升方案:

智能决策:根据质量评分自动判断优化策略
多种算法:支持 FFmpeg 和 AI 模型(Real-ESRGAN、RIFE 等)
实时反馈:显示优化进度和质量对比
灵活配置:支持自定义超分倍数、帧率等参数
无缝集成:与现有合成流程完美结合

通过一键优化,可以将普通质量的视频快速提升到更高质量,大幅改善观看体验!