Files
meijiaka-zy/docs/meijiaka-zhijian-proposal.md
T

28 KiB
Raw Blame History

美家卡智剪 — 产品技术方案

基于「美家卡智影」架构的 AI 辅助短视频剪辑产品方案 版本: v2.0 | 日期: 2026-04-20


一、产品定位

维度 美家卡智影(现有) 美家卡智剪(新项目)
核心能力 AI 数字人视频生成 AI 音色克隆 + 语音合成 + 素材智能剪辑
视频来源 KlingAI 生成数字人视频 用户导入长视频素材
声音来源 KlingAI 预设/自定义音色 + 数字人 用户克隆音色 / 预设音色 + TTS
目标场景 口播视频、营销视频从无到有 已有长素材快速剪辑成片、声音克隆配音
核心差异 「生成式」创作 「剪辑式」创作 + AI 声音

一句话定义

美家卡智剪 = 导入长视频 + AI 文案分镜 + 自动切割 + 音色克隆 + 语音合成 + 字幕压制 + 封面合成 + 视频导出


二、核心流程设计(6 步)

┌─────────────────────────────────────────────────────────────────────┐
│                                                                     │
│  Step 1    →  Step 2    →  Step 3    →  Step 4    →  S5  →  S6   │
│  脚本生成  →  视频剪辑  →  音色配音  →  字幕压制  →  封面 →  合成 │
│                                                                     │
│  ├─ AI文案      ├─ 导入长视频    ├─ 音色克隆     ├─ 自动打轴      │
│  ├─ 粘贴文案    ├─ 自动切割      ├─ 预设音色     ├─ ASS字幕       │
│  ├─ 智能分镜    │   (按分镜时长) ├─ 分镜TTS      ├─ FFmpeg压制    │
│  │              │                ├─ 试听/调整                     │
│  │              │                │                                │
│  [改造]         [全新]           [全新]          [复用]  [复用]   │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

各步骤详细说明


Step 1 — 脚本生成(Script Generation

文案输入(3 种方式):

  1. AI 生成:输入主题/关键词,LLM 生成短视频文案
  2. 直接粘贴:用户粘贴已准备好的文案,系统自动分镜
  3. 导入文件:支持 .txt / .docx / .srt 导入

智能分镜:

  • 按句子/段落自动拆分分镜
  • 每个分镜含:voiceover(旁白文案)、duration(预估时长)
  • 支持拖拽调整分镜顺序、合并、拆分
  • 文案字数根据目标时长自动约束(15s≈40字 / 30s≈80字 / 60s≈160字)

输出:

  • segments[]:分镜列表,每个分镜含文案和预估时长
  • 此步骤与智影 Step 1 基本一致,Prompt 调整为生成纯旁白文案(不含场景描述)

Step 2 — 视频剪辑(Video Editing

核心逻辑:导入一个长视频,按分镜时长自动切割。

流程:

  1. 用户导入一个长视频文件(.mp4/.mov
  2. 系统提取视频总时长
  3. 按分镜数量和预估时长自动计算切割点
  4. 调用 FFmpeg 将长视频切割为 N 个片段
  5. 每个片段自动绑定到对应分镜

自动切割算法:

总视频时长 = T
分镜数 = N
分镜预估时长 = [d1, d2, ..., dN]
预估总时长 = D = d1 + d2 + ... + dN

如果 D <= T:
  按比例分配: 每个分镜实际时长 = di * (T / D)
  切割点: cumsum([d1*T/D, d2*T/D, ...])

如果 D > T:
  提示用户: 文案预估总时长超过视频时长,建议缩短文案或导入更长视频

界面示意:

┌────────────────────────────────────────────┐
│  分镜列表              │  素材导入          │
│  ├─ 分镜1 (5s)        │  ├─ 📁 点击导入    │
│  ├─ 分镜2 (8s)        │  │   或拖拽视频    │
│  ├─ 分镜3 (7s)        │  │                 │
│  └─ 分镜4 (5s)        │  │  🎬 素材.mp4    │
│                       │  │  时长: 25s      │
│  预估总时长: 25s      │  │  分辨率: 1080p  │
│                       │  └────────────────│
│  [自动切割]           │                   │
└────────────────────────────────────────────┘

切割结果预览:
┌────────────────────────────────────────────┐
│  分镜1 ←→ 🎬 [00:00 - 00:05] (5s)        │
│  分镜2 ←→ 🎬 [00:05 - 00:13] (8s)        │
│  分镜3 ←→ 🎬 [00:13 - 00:20] (7s)        │
│  分镜4 ←→ 🎬 [00:20 - 00:25] (5s)        │
└────────────────────────────────────────────┘

技术实现:

  • 前端:文件选择 → 调用 Rust IPC import_media → 保存到项目 media/ 目录
  • Rustsplit_video 命令使用 FFmpeg -ss + -t 截取片段
  • 每个片段保存为 shot_{index}.mp4,路径写入 segment.mediaPath

Step 3 — 音色配音(Voice & Dubbing

音色管理:

  • 预设音色:接入 KlingAI 官方预设音色(温柔女声、播报男声等)
  • 我的音色:用户克隆的音色列表
    • 克隆方式:录音(10-20 秒)或上传音频文件
    • 克隆状态:处理中 / 完成 / 失败
    • 支持预览、重命名、删除

语音合成(TTS):

  • 为每个分镜独立选择音色
  • 支持统一设置(一键应用到全部分镜)
  • 可调节语速(0.8x - 2.0x
  • 实时试听、重新生成

批量合成:

  • 一键合成所有分镜音频
  • 后台 Async Engine 并行处理(受槽位限制)
  • 实时进度显示

Step 4 — 字幕压制(Subtitle Burning

基本复用智影现有逻辑,数据源变化:

  • 原:基于数字人视频的音频流进行自动打轴
  • 新:基于 TTS 合成的音频文件进行自动打轴

流程:

  1. 提交 subtitle 任务(mode: auto_align
  2. 参数:audioUrlTTS 音频)+ audioText(分镜文案)
  3. 返回 alignmentResultutterances 时间轴)
  4. 用户选择字幕样式(颜色/字号/描边/位置)
  5. 调用 Rust IPC burn_subtitle 压制 ASS 字幕到视频

输出:

  • 每个分镜生成 burnedVideoPath(素材视频 + TTS 音频 + ASS 字幕)

Step 5 — 封面制作(Cover Design

完全复用智影现有逻辑:

  1. 提取第一个分镜视频的首帧作为背景
  2. 用户输入封面标题
  3. 选择字体样式(抖音美好体等)
  4. 调用 Rust IPC generate_cover_image 合成封面

Step 6 — 视频合成(Video Composite

完全复用智影现有逻辑:

  1. 收集所有分镜的 burnedVideoPath
  2. 如有封面图,先转为 0.5s 封面视频
  3. 调用 Rust IPC video_composite_synthesis 拼接所有片段
  4. 输出最终成品到 ~/Documents/Meijiaka/products/

三、功能模块对比矩阵

模块 智影(现有) 智剪(新) 复用度
脚本生成 AI 生成脚本 AI 生成文案 + 粘贴/导入 🔶 改造
视频生成 KlingAI 数字人 素材导入 + 自动切割 🔴 新增
音色管理 KlingAI Element 绑定音色 独立音色克隆 + 预设库 🔶 改造
语音合成 数字人自带口播 TTS 独立合成音频 🔴 新增
字幕压制 自动打轴+FFmpeg 完全复用 🟢 复用
封面制作 首帧+标题+FFmpeg 完全复用 🟢 复用
视频合成 FFmpeg concat 完全复用 🟢 复用
本地存储 meta.json + segments.json 扩展字段 🔶 改造
任务调度 6 个 Handler 新增 TTS Handler 🔶 改造
用户认证 JWT + 手机号 完全复用 🟢 复用
形象克隆 Avatar 完整流程 简化为音色克隆 🔶 改造

🟢 完全复用 | 🔶 需要改造 | 🔴 全新开发


四、前端架构方案

4.1 页面结构

tauri-app/src/pages/
├── VideoCreation/
│   ├── index.tsx                    # 6步流程容器(复用,调整步骤名)
│   ├── ScriptCreation.tsx           # Step 1: 脚本生成(复用改造)
│   ├── VideoEditing.tsx             # Step 2: 视频剪辑(全新)
│   ├── VoiceDubbing.tsx             # Step 3: 音色配音(全新)
│   ├── SubtitleBurning.tsx          # Step 4: 字幕压制(复用)
│   ├── CoverDesign.tsx              # Step 5: 封面制作(复用)
│   └── VideoComposite.tsx           # Step 6: 视频合成(复用)

4.2 Store 设计

projectStore(改造)

interface SmartCutState {
  // === Step 1: 脚本与分镜 ===
  segments: SmartCutShot[];
  topic?: string;
  scriptType?: string;
  
  // === Step 3: 音色配音 ===
  defaultVoiceId?: string;           // 默认音色
  
  // === Step 5+6: 封面与合成 ===
  coverPath?: string;
  coverConfig?: CoverConfig;
  finalVideoPath?: string;
  exportedAt?: string;
  
  // === 流程状态 ===
  currentStep: number;               // 1-6
}

interface SmartCutShot {
  id: string;
  type: 'segment' | 'empty_shot';
  voiceover: string;                 // 旁白文案
  duration: number;                  // 预估/实际时长
  
  // === Step 2: 视频剪辑后绑定 ===
  mediaPath?: string;                // 切割后的视频片段路径
  mediaStartTime?: number;           // 在原视频中的起始时间(秒)
  mediaEndTime?: number;             // 在原视频中的结束时间(秒)
  
  // === Step 3: 配音配置 ===
  ttsConfig?: TTSConfig;
  audioPath?: string;                // TTS 合成音频本地路径
  audioUrl?: string;                 // TTS 音频远程 URL
  
  // === Step 4: 字幕与后期 ===
  alignmentResult?: AlignmentResult;
  burnedVideoPath?: string;
  burnedAt?: string;
}

interface TTSConfig {
  voiceId: string;
  voiceName: string;
  speed: number;                     // 0.8 - 2.0
}

voiceStore(新增)

interface VoiceState {
  // 预设音色
  presetVoices: PresetVoice[];
  presetVoicesLoading: boolean;
  
  // 用户克隆音色
  clonedVoices: ClonedVoice[];
  clonedVoicesLoading: boolean;
  
  // 当前选中的默认音色
  selectedVoiceId?: string;
}

interface PresetVoice {
  voiceId: string;
  voiceName: string;
  previewUrl?: string;
  provider: string;
}

interface ClonedVoice {
  id: string;                        // vc_xxx
  name: string;
  providerVoiceId: string;           // KlingAI 返回的 voice_id
  provider: string;
  status: 'processing' | 'succeed' | 'failed';
  previewUrl?: string;
  createdAt: string;
}

4.3 新增 Hooks

Hook 职责
useVoiceClone.ts 音色克隆:提交克隆、轮询状态、管理列表
useTTSGeneration.ts TTS 批量合成:提交任务、轮询、更新 segment
useMediaImport.ts 素材导入:文件选择、调用 Rust IPC
useAutoSplit.ts 自动切割:计算切割点、调用 split_video、绑定分镜

4.4 API 模块

tauri-app/src/api/modules/
├── voice.ts              # 音色克隆 / 预设音色 / 查询 / 删除
├── tts.ts                # TTS 提交 / 查询 / 批量
├── script.ts             # 复用,文案生成
├── caption.ts            # 复用,字幕相关
└── videoComposite.ts     # 复用,视频合成

五、后端架构方案

5.1 新增 API 路由

# python-api/app/api/v1/voice.py
@router.post("/voice/clone")           # 提交音色克隆任务
@router.get("/voice/clones")           # 查询用户克隆音色列表
@router.get("/voice/clones/{id}")      # 查询单个克隆任务
@router.delete("/voice/clones/{id}")   # 删除克隆音色
@router.get("/voice/presets")          # 查询预设音色列表

# python-api/app/api/v1/tts.py
@router.post("/tts")                   # 提交 TTS 任务
@router.get("/tts/{job_id}")           # 查询 TTS 任务状态
@router.post("/tts/batch")             # 批量提交 TTS 任务

5.2 新增 Async Engine Handler

新增 tts 任务类型:

# app/scheduler/handlers/tts_handler.py

class TTSHandler(AsyncHandler):
    """TTS 语音合成 Handler
    
    为每个分镜的文案生成语音音频。
    """
    job_type = "tts"
    slot_key = "kling:tts_slots"
    max_slots = 10
    
    async def handle(self, job: JobRecord) -> list[StateChange]:
        """处理流程:
        1. 从 job.payload 提取 text, voice_id, voice_speed
        2. 调用 KlingAI TTS API 生成音频
        3. 轮询任务完成
        4. 下载音频文件到本地项目目录
        5. (可选)上传七牛云持久化
        6. 返回结果含 audio_path, audio_url, duration
        """

Redis 配置:

槽位 Key: kling:tts_slots
槽位数: 10

5.3 新增 Service 层

# app/services/tts_service.py
class TTSService:
    """TTS 语音合成服务"""
    
    async def generate_audio(
        self,
        text: str,
        voice_id: str,
        voice_speed: float = 1.0,
        output_dir: str | None = None,
    ) -> TTSResult:
        """生成单条 TTS 音频"""
        
    async def batch_generate(
        self,
        items: list[TTSRequest],
        user_id: str,
    ) -> list[str]:
        """批量提交 TTS 任务到 Async Engine"""

# app/services/voice_clone_service.py
class VoiceCloneService:
    """音色克隆服务"""
    
    async def create_clone(
        self,
        voice_name: str,
        audio_url: str,           # 七牛云音频URL
        user_id: str,
    ) -> VoiceCloneJob:
        """提交音色克隆任务到 KlingAI"""
        
    async def sync_clone_status(
        self,
        job_id: str,
    ) -> VoiceCloneStatus:
        """同步查询克隆任务状态(轻量操作,不走Async Engine"""
        
    async def list_clones(self, user_id: str) -> list[ClonedVoice]:
        """查询用户所有克隆音色"""

5.4 新增数据库模型

# app/models/voice_clone.py
class VoiceClone(Base):
    """用户克隆音色元数据(云端备份)"""
    __tablename__ = "voice_clones"
    
    id: Mapped[str] = mapped_column(String(32), primary_key=True)  # vc_xxx
    user_id: Mapped[UUID] = mapped_column(ForeignKey("users.id"))
    name: Mapped[str] = mapped_column(String(100))
    provider: Mapped[str] = mapped_column(String(50), default="klingai")
    provider_voice_id: Mapped[str] = mapped_column(String(100))
    status: Mapped[str] = mapped_column(String(20))  # processing/succeed/failed
    preview_url: Mapped[str | None] = mapped_column(String(500))
    fail_reason: Mapped[str | None] = mapped_column(Text)
    deleted_at: Mapped[datetime | None]
    created_at: Mapped[datetime]
    updated_at: Mapped[datetime]

注:智剪中不需要 Element(形象主体),只需要 Voice(音色),因此独立建表更简洁。

5.5 复用已有能力

已有能力 复用方式
KlingAIProvider.generate_tts() 直接调用,封装到 Service 层
KlingAIProvider.create_custom_voice() 直接调用,封装到 VoiceCloneService
KlingAIProvider.list_preset_voices() 直接调用
VolcengineCaptionService 完全复用,传入 TTS 音频 URL
SlotManager + JobRegistry 完全复用
TokenManager + JWTTokenStrategy 完全复用
qiniu_service.upload() 复用,支持 audio 类型
七牛云上传凭证 复用

六、Rust 层改造方案

6.1 新增 IPC 命令

// commands/media.rs
#[tauri::command]
async fn import_media(
    app: AppHandle,
    project_id: String,
    source_path: String,
) -> Result<MediaInfo, String>

// commands/video_edit.rs
#[tauri::command]
async fn split_video(
    app: AppHandle,
    input_path: String,
    segments: Vec<SplitSegment>,   // [{start, end, output_name}]
) -> Result<Vec<String>, String>  // 返回切割后的文件路径列表

6.2 新增 FFmpeg 命令封装

ffmpeg_cmd.rs 中新增:

/// 按时间范围批量截取视频片段
/// 
/// 输入一个长视频,按多个时间范围切割为独立文件
pub async fn split_video_segments(
    app: &AppHandle,
    input: &str,
    segments: &[(f64, f64, &str)],  // (start, end, output_path)
) -> Result<Vec<String>, FFmpegError>

/// 提取视频元信息(时长、分辨率、码率等)
pub async fn probe_media_info(
    input: &str,
) -> Result<MediaInfo, FFmpegError>

6.3 本地存储路径扩展

// storage/paths.rs

/// 项目素材目录:~/Documents/Meijiaka/projects/{id}/media/
pub fn get_project_media_dir(project_id: &str) -> PathBuf

/// 项目音频目录:~/Documents/Meijiaka/projects/{id}/audio/
pub fn get_project_audio_dir(project_id: &str) -> PathBuf

/// 项目分镜视频目录:~/Documents/Meijiaka/projects/{id}/shots/
pub fn get_project_shots_dir(project_id: &str) -> PathBuf

存储结构:

~/Documents/Meijiaka/
├── projects/{project_id}/
│   ├── meta.json
│   ├── segments.json
│   ├── media/              # 导入的原始素材
│   │   └── source.mp4      # 原始长视频
│   ├── shots/              # 自动切割后的分镜视频
│   │   ├── shot_001.mp4
│   │   └── shot_002.mp4
│   ├── audio/              # TTS 生成的音频
│   │   ├── tts_001.mp3
│   │   └── tts_002.mp3
│   └── assets/             # 封面等成品资源
│       └── cover_xxx.png

七、AI 能力集成

7.1 音色克隆

Provider: KlingAI(已具备能力)

API: POST /v1/general/custom-voices
参数:
  - voice_name: 音色名称
  - voice_url: 音频文件URL5-30秒,干净人声)
  
限制:
  - 音频时长: 5-30 秒
  - 格式: MP3 / WAV
  - 要求: 单一人声、无杂音、无背景音乐

前端录音方案:

  • 使用 Web Audio API 录制麦克风音频
  • 实时波形可视化
  • 录制时长控制(10-20 秒最佳)
  • 录制完成后上传至七牛云 → 后端提交克隆任务

状态流转:

用户录音/上传 → 前端上传七牛云 → 后端调用 KlingAI 创建音色
                                          ↓
                                    [processing] ← 前端轮询
                                          ↓
                                    [succeed] → 保存到 DB → 加入"我的音色"
                                          ↓
                                    [failed] → 提示用户重新录制

7.2 语音合成(TTS

Provider: KlingAI(已具备能力,需上层封装)

API: POST /v1/audio/tts
参数:
  - text: 要合成的文本(旁白文案)
  - voice_id: 音色ID(预设或自定义)
  - voice_language: zh / en
  - voice_speed: 0.8 - 2.0(默认 1.0
  
返回:
  - task_id: 任务ID
  - 轮询 GET /v1/audio/tts/{task_id} 获取音频URL

批量处理策略:

  • 每个分镜一个 TTS 任务
  • Async Engine 并行处理(最多 10 个并发)
  • 前端显示总体进度(已完成 N / 总分镜数 M)

7.3 文案生成

复用现有 ScriptService,但调整 Prompt

  • 原:生成「场景描述 + 旁白 + 时长」的营销脚本
  • 新:生成「旁白文案 + 预估时长」的短视频文案
  • 支持根据目标时长(15s / 30s / 60s)控制字数

八、独立新仓库初始化方案

8.1 仓库创建

# 在本地创建新仓库目录
mkdir meijiaka-zj
cd meijiaka-zj
git init

# 复制智影代码(排除依赖和构建产物)
rsync -av \
  --exclude='.git' \
  --exclude='node_modules' \
  --exclude='.venv' \
  --exclude='__pycache__' \
  --exclude='.mypy_cache' \
  --exclude='.ruff_cache' \
  --exclude='.pytest_cache' \
  --exclude='dist' \
  --exclude='target' \
  --exclude='*.lock' \
  --exclude='.DS_Store' \
  ../ai-meijiaka/ .

# 初始化提交
git add -A
git commit -m "init: fork from meijiaka-zy"

8.2 品牌配置修改清单

文件 修改项
tauri-app/src-tauri/tauri.conf.json productName: 美家卡智影 → 美家卡智剪;identifier: cn.meijiaka.ai-videocn.meijiaka.ai-video-editortitle: 美家卡 智影 → 美家卡 智剪
tauri-app/package.json name: 可保持不变(内部包名)
python-api/app/main.py FastAPI 文档标题、描述更新
AGENTS.md 全文替换「智影」→「智剪」,更新产品描述
README.md 更新为智剪的产品说明

8.3 项目结构

meijiaka-zj/                   # 新仓库根目录
├── python-api/               # FastAPI 后端(从智影复制后改造)
│   ├── app/
│   │   ├── api/v1/          # 新增 voice.py, tts.py 路由
│   │   ├── ai/providers/    # 复用 KlingAIProvider
│   │   ├── scheduler/handlers/  # 新增 tts_handler.py
│   │   ├── services/        # 新增 tts_service.py, voice_clone_service.py
│   │   ├── models/          # 新增 voice_clone.py
│   │   └── schemas/         # 新增 voice.py, tts.py
│   ├── config/
│   ├── alembic/
│   ├── pyproject.toml
│   └── ...
│
├── tauri-app/               # Tauri 前端(从智影复制后改造)
│   ├── src/
│   │   ├── pages/VideoCreation/
│   │   │   ├── ScriptCreation.tsx      # Step 1(改造)
│   │   │   ├── VideoEditing.tsx        # Step 2(新增)
│   │   │   ├── VoiceDubbing.tsx        # Step 3(新增)
│   │   │   ├── SubtitleBurning.tsx     # Step 4(复用)
│   │   │   ├── CoverDesign.tsx         # Step 5(复用)
│   │   │   └── VideoComposite.tsx      # Step 6(复用)
│   │   ├── store/
│   │   │   ├── projectStore.ts         # 改造
│   │   │   └── voiceStore.ts           # 新增
│   │   ├── api/modules/
│   │   │   ├── voice.ts                # 新增
│   │   │   └── tts.ts                  # 新增
│   │   └── hooks/
│   │       ├── useVoiceClone.ts        # 新增
│   │       ├── useTTSGeneration.ts     # 新增
│   │       └── useAutoSplit.ts         # 新增
│   ├── src-tauri/src/
│   │   ├── commands/media.rs           # 新增
│   │   ├── ffmpeg_cmd.rs               # 新增函数
│   │   └── storage/paths.rs            # 新增路径
│   └── ...
│
├── docs/                      # 文档
│   └── meijiaka-zhijian-proposal.md
│
└── scripts/                   # 工具脚本

九、实施路线图

Phase 1: 基础架构(2 周)

目标:搭建新项目骨架,打通基础能力

任务 说明
① 仓库初始化 复制智影代码,修改品牌配置,建立独立仓库
② 数据模型改造 新增 voice_clones 表,改造 segments Schema
③ TTS API 封装 新增 tts_service.pyvoice.py / tts.py 路由
④ 音色克隆 API 新增 voice_clone_service.py
⑤ 前端 Store 改造 改造 projectStore,新增 voiceStore
⑥ 素材导入 IPC 新增 import_mediasplit_video Rust 命令

Phase 2: 核心流程(2 周)

目标:完成 6 步核心流程 MVP

任务 说明
⑦ Step 1 脚本生成 复用现有逻辑,Prompt 调整为纯旁白文案
⑧ Step 2 视频剪辑 素材导入 UI + 自动切割逻辑 + 分镜绑定
⑨ Step 3 音色配音 音色克隆 UI + TTS 合成 UI + 批量任务
⑩ TTS Async Handler 实现 TTSHandler,接入 Async Engine
⑪ 字幕压制适配 基于 TTS 音频的自动打轴 + 字幕压制
⑫ 封面+合成 复用现有逻辑,验证端到端流程

Phase 3: 打磨优化(1 周)

目标:提升用户体验,修复问题

任务 说明
⑬ 切割算法优化 智能检测场景切换点,避免在人物说话中间切割
⑭ 批量操作优化 统一音色、批量重新合成
⑮ 错误处理 视频格式不支持、TTS 失败、文案超长等异常
⑯ 性能优化 大视频导入、多任务并发
⑰ 测试验收 全流程测试,修复 bug

总工期预估:5 周

Week 1-2: Phase 1 — 基础架构
Week 3-4: Phase 2 — 核心流程 MVP
Week 5:   Phase 3 — 打磨优化 + 测试

十、技术风险与应对

风险 影响 应对方案
KlingAI TTS 并发限制 批量合成慢 Async Engine 槽位控制 + 前端进度管理
KlingAI 音色克隆失败率高 用户体验差 前端引导用户录制规范音频(安静环境、清晰人声)
文案总时长 > 视频时长 无法完整配音 Step 2 导入时校验,超长则提示用户调整文案或换视频
自动切割点落在不自然位置 画面割裂 V2 引入场景切换检测,在关键帧处切割
大视频文件导入卡顿 前端无响应 Tauri 后端异步处理导入,前端仅显示进度
视频格式兼容性 某些格式无法处理 FFmpeg 统一标准化转码,支持主流格式
TTS 文本过长 KlingAI 限制 分镜文案字数控制(建议单分镜 < 200 字)

十一、长期演进方向

版本 功能
V1.0MVP 长视频导入 + 自动切割 + 音色克隆 + TTS + 字幕 + 封面 + 合成
V1.5 智能切割(基于场景切换检测)
V2.0 多轨道编辑(背景音乐、音效、转场)
V2.5 AI 视频摘要(长视频自动提取精彩片段)
V3.0 多音色对话(支持多人配音、角色音色)

附录

A. 关键术语对照

智影术语 智剪对应 说明
elementId voiceId 从数字人形象ID变为音色ID
videoUrl mediaPath 从AI生成视频变为切割后的素材片段
Avatar VoiceClone 从形象克隆简化为音色克隆
humanId 移除,不再需要
scene 可选保留,用于V2智能匹配

B. 需要改造的文件清单

后端(python-api):

新增:
  app/api/v1/voice.py
  app/api/v1/tts.py
  app/services/tts_service.py
  app/services/voice_clone_service.py
  app/scheduler/handlers/tts_handler.py
  app/models/voice_clone.py
  app/schemas/voice.py
  app/schemas/tts.py

改造:
  app/scheduler/main.py          # 注册 TTSHandler
  app/api/v1/router.py           # 添加 voice/tts 路由
  app/schemas/segment.py         # 扩展 Segment Schema
  app/ai/prompts/script/*.txt    # 调整 Prompt 为纯旁白文案

前端(tauri-app):

新增:
  src/pages/VideoCreation/VideoEditing.tsx
  src/pages/VideoCreation/VoiceDubbing.tsx
  src/store/voiceStore.ts
  src/api/modules/voice.ts
  src/api/modules/tts.ts
  src/hooks/useVoiceClone.ts
  src/hooks/useTTSGeneration.ts
  src/hooks/useAutoSplit.ts

改造:
  src/pages/VideoCreation/index.tsx      # 调整为6步
  src/pages/VideoCreation/ScriptCreation.tsx  # 移除场景描述字段
  src/store/projectStore.ts              # 扩展数据模型
  src/api/types.ts                       # 更新类型定义

Rustsrc-tauri):

新增:
  src/commands/media.rs
  src/ffmpeg_cmd.rs 中的 split_video_segments / probe_media_info
  src/storage/paths.rs 中的 media/audio/shots 路径

改造:
  src/lib.rs                 # 注册新命令

本方案基于「美家卡智影」现有架构设计,最大化复用已有能力,降低开发成本与风险。