feat: 功能优化

This commit is contained in:
2025-12-15 23:33:02 +08:00
parent 7f7551f74f
commit 870ea10351
36 changed files with 3289 additions and 40 deletions

View File

@@ -0,0 +1,77 @@
## Context
混剪功能需要将多种比例的素材统一输出为 9:16 竖屏视频720x1280
阿里云 ICE 支持视频裁剪和缩放,需要在 Timeline 中配置正确的参数。
## Goals / Non-Goals
**Goals:**
- 支持横屏 (16:9) 素材自动裁剪为竖屏 (9:16)
- 支持多种裁剪模式(居中、智能、填充)
- 保持视频质量,避免过度拉伸
**Non-Goals:**
- 不实现自定义裁剪区域选择
- 不实现实时预览
## Decisions
### 裁剪模式设计
| 模式 | 说明 | 适用场景 |
|------|------|----------|
| `center` | 居中裁剪,保持原始比例 | 主体在画面中央 |
| `smart` | 智能裁剪ICE AI 识别主体) | 人物/产品展示 |
| `fill` | 填充黑边,不裁剪 | 保留完整画面 |
### ICE 参数方案
**方案 A使用 CropX/CropY/CropW/CropH**
```json
{
"MediaURL": "xxx",
"CropX": 280,
"CropY": 0,
"CropW": 720,
"CropH": 1280
}
```
**方案 B使用 Effects + Crop**
```json
{
"Effects": [{
"Type": "Crop",
"X": 280,
"Y": 0,
"Width": 720,
"Height": 1280
}]
}
```
### 裁剪计算公式
对于 16:9 横屏素材 (1920x1080) 裁剪为 9:16
```
目标比例 = 9/16 = 0.5625
源比例 = 16/9 = 1.778
// 居中裁剪
cropHeight = sourceHeight = 1080
cropWidth = cropHeight * (9/16) = 607.5 ≈ 608
cropX = (sourceWidth - cropWidth) / 2 = (1920 - 608) / 2 = 656
cropY = 0
```
## Risks / Trade-offs
- **画面损失**:居中裁剪会丢失左右两侧内容
- **缩放失真**:填充模式会缩小画面
- **ICE 兼容性**:需确认 ICE 版本支持的参数
## Open Questions
1. ICE 是否支持智能主体识别裁剪?
2. 是否需要前端预览裁剪效果?
3. 默认裁剪模式选择哪种?

View File

@@ -0,0 +1,21 @@
# Change: ICE 增加 9:16 竖屏裁剪支持
## Why
当前混剪功能输出固定为 720x1280 (9:16) 尺寸,但输入素材可能是横屏 (16:9) 或其他比例。
需要支持自动裁剪/缩放,确保输出视频符合竖屏要求,避免黑边或变形。
## What Changes
- 新增视频裁剪模式配置(居中裁剪 / 智能裁剪 / 填充黑边)
- ICE Timeline 增加 CropMode 参数
- 后端支持不同比例素材的自动处理
- 前端可选裁剪模式(默认居中裁剪)
## Impact
- Affected specs: `mix-task`
- Affected code:
- `BatchProduceAlignment.java` - Timeline 构建逻辑
- `MixTaskSaveReqVO.java` - 新增 cropMode 参数
- `Mix.vue` - 可选裁剪模式

View File

@@ -0,0 +1,48 @@
## ADDED Requirements
### Requirement: 9:16 竖屏裁剪支持
混剪系统 SHALL 支持将不同比例的素材自动处理为 9:16 竖屏输出。
系统 SHALL 提供以下裁剪模式:
- `center`:居中裁剪,保持原始比例,裁剪超出部分
- `smart`:智能裁剪,识别主体位置进行裁剪(依赖 ICE 能力)
- `fill`:填充模式,缩放素材并填充黑边保留完整画面
系统 SHALL 默认使用 `center` 居中裁剪模式。
#### Scenario: 横屏素材居中裁剪
- **WHEN** 用户上传 16:9 横屏素材1920x1080
- **AND** 选择 `center` 裁剪模式
- **THEN** 系统自动计算裁剪区域(居中取 608x1080
- **AND** 输出 720x1280 竖屏视频
#### Scenario: 竖屏素材无需裁剪
- **WHEN** 用户上传 9:16 竖屏素材720x1280
- **THEN** 系统直接使用原素材
- **AND** 不进行裁剪处理
#### Scenario: 填充模式保留完整画面
- **WHEN** 用户上传 16:9 横屏素材
- **AND** 选择 `fill` 填充模式
- **THEN** 系统缩放素材至竖屏宽度
- **AND** 上下填充黑边
- **AND** 输出 720x1280 竖屏视频
### Requirement: 裁剪模式配置
混剪任务创建 API SHALL 接受可选的 `cropMode` 参数。
参数规格:
- 字段名:`cropMode`
- 类型String
- 可选值:`center` | `smart` | `fill`
- 默认值:`center`
#### Scenario: 指定裁剪模式
- **WHEN** 用户创建混剪任务时指定 `cropMode: "fill"`
- **THEN** 所有素材使用填充模式处理
#### Scenario: 使用默认裁剪模式
- **WHEN** 用户创建混剪任务未指定 `cropMode`
- **THEN** 系统使用默认的 `center` 居中裁剪模式

View File

@@ -0,0 +1,18 @@
## 1. 调研阶段
- [ ] 1.1 确认阿里云 ICE 支持的裁剪参数CropX/CropY/CropW/CropH 或 ScaleMode
- [ ] 1.2 测试横屏素材在 ICE 中的默认处理方式
## 2. 后端实现
- [ ] 2.1 MixTaskSaveReqVO 新增 cropMode 字段center/smart/fill
- [ ] 2.2 BatchProduceAlignment 实现裁剪计算逻辑
- [ ] 2.3 ICE Timeline 增加裁剪参数
- [ ] 2.4 单元测试
## 3. 前端实现
- [ ] 3.1 Mix.vue 新增裁剪模式选择(默认居中裁剪)
- [ ] 3.2 提交参数增加 cropMode
## 4. 测试验证
- [ ] 4.1 横屏素材混剪测试
- [ ] 4.2 竖屏素材混剪测试
- [ ] 4.3 混合比例素材测试