一键优化功能使用指南
功能概述
一键优化是基于视频质量评分的自动化视频增强系统,能够根据质量评分的建议自动执行超分辨率(Upscale)和插帧(Frame Interpolation)处理,显著提升视频质量。
核心特性
- 智能决策:根据质量评分的各维度得分自动判断是否需要超分/插帧
- 多种算法:支持 FFmpeg、Real-ESRGAN、Waifu2x(超分)和 RIFE(插帧)
- 质量对比:优化前后质量评分对比,直观展示提升效果
- 进度追踪:实时显示超分和插帧步骤的执行状态
- 灵活配置:支持自定义超分倍数、目标帧率等参数
工作流程
合成视频 → 质量评分 → 一键优化 → 超分/插帧 → 重新评分 → 质量对比详细步骤
- 视频合成:使用 FFmpeg 合成分镜视频
- 质量评估:自动对合成视频进行 5 维度质量评分
- 分析建议:系统生成优化建议(如"建议超分提升分辨率"、"建议插帧提升流畅度")
- 点击优化:用户点击"一键优化"按钮
- 自动处理:
- 根据建议判断是否需要超分(分辨率得分 < 75)
- 根据建议判断是否需要插帧(流畅度得分 < 70)
- 依次执行超分和插帧处理
- 重新评分:对优化后的视频重新评分
- 质量对比:展示优化前后的分数对比和等级变化
使用方法
前端界面操作
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 // 目标帧率
}可选超分方法
| 方法 | 说明 | 依赖 | 速度 | 质量 |
|---|---|---|---|---|
ffmpeg | FFmpeg Lanczos 算法 | 无 | ⚡⚡⚡ | ⭐⭐⭐ |
realesrgan | Real-ESRGAN AI 模型 | realesrgan-ncnn-vulkan | ⚡⚡ | ⭐⭐⭐⭐⭐ |
waifu2x | Waifu2x(动漫优化) | waifu2x-ncnn-vulkan | ⚡⚡ | ⭐⭐⭐⭐ |
可选插帧方法
| 方法 | 说明 | 依赖 | 速度 | 质量 |
|---|---|---|---|---|
ffmpeg | FFmpeg minterpolate | 无 | ⚡⚡⚡ | ⭐⭐⭐ |
rife | RIFE 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)
}优化决策逻辑
触发条件
系统根据以下条件自动判断是否需要超分或插帧:
超分触发条件(满足任一)
- 建议关键词:优化建议中包含"分辨率"、"超分"等关键词
- 分辨率得分:resolution 维度得分 < 75
插帧触发条件(满足任一)
- 建议关键词:优化建议中包含"帧率"、"插帧"、"流畅"等关键词
- 流畅度得分:motion_smoothness 维度得分 < 70
处理顺序
- 先超分:提升分辨率(如 720p → 1440p)
- 后插帧:提升帧率(如 30fps → 60fps)
这样的顺序可以确保插帧基于更高质量的画面进行,获得更好的效果。
性能优化建议
1. 选择合适的方法
- 快速处理:使用
ffmpeg方法(无需额外依赖,速度快) - 高质量输出:使用 AI 模型(Real-ESRGAN、RIFE)
2. 合理设置参数
超分倍数:
- 1.5x:轻度提升,速度快
- 2.0x:常规提升,平衡质量和速度
- 4.0x:大幅提升,速度慢
目标帧率:
- 30fps:常规视频
- 60fps:流畅视频(推荐)
- 120fps:高刷视频(仅专业需求)
3. 分步处理
如果视频文件较大,建议:
- 先执行超分,查看效果
- 满意后再执行插帧
可以通过修改 preferences 参数来控制。
常见问题
Q1: 一键优化按钮不可用?
原因:缺少质量评分数据
解决:确保视频合成时启用了质量评分功能(enable_quality_score: true)
Q2: 优化任务失败?
可能原因:
- 视频文件路径无效(OSS URL 暂不支持,需要本地路径)
- FFmpeg 未安装或版本过低
- 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 等)
✅ 实时反馈:显示优化进度和质量对比
✅ 灵活配置:支持自定义超分倍数、帧率等参数
✅ 无缝集成:与现有合成流程完美结合
通过一键优化,可以将普通质量的视频快速提升到更高质量,大幅改善观看体验!