# Topaz Video AI SDK 使用指南

## 快速开始

### 1. 基本设置

```rust
use tvai_v2::{TvaiSdk, TemplateBuilder};

// 创建 SDK 实例（自动加载内置配置）
let mut sdk = TvaiSdk::new();
```

### 2. 创建简单的增强模板

```rust
let template = TemplateBuilder::new("基本增强")
    .description("使用 Proteus 模型进行基本视频增强")
    .enable_enhancement("prob-4")  // 使用 Proteus 4 模型
    .enhancement_params(25, 30, 20)  // 降噪25%, 细节30%, 锐化20%
    .build()?;
```

### 3. 生成 FFmpeg 命令

```rust
let command = sdk.generate_ffmpeg_command(
    &template,
    "input.mp4",
    "output.mp4"
)?;

println!("FFmpeg 命令: {}", command);
```

## 高级功能

### 1. 使用内置编解码器

```rust
// 查看可用的音频编解码器
for codec in sdk.ffmpeg_generator.get_available_audio_codecs() {
    println!("音频编解码器: {} - {}", codec.name, codec.ffmpeg_opts);
}

// 查看可用的视频编码器
for encoder in sdk.ffmpeg_generator.get_available_video_encoders() {
    println!("视频编码器: {} - {}", encoder.id, encoder.encoder);
}
```

### 2. 自动编码器选择

```rust
// 根据目标平台自动选择编码器
let auto_command = sdk.ffmpeg_generator.generate_with_auto_encoder(
    &template,
    "input.mp4",
    "output.mp4",
    "windows",      // 目标操作系统
    Some("nvidia")  // GPU 类型
)?;
```

### 3. 模型推荐

```rust
// 根据分辨率获取推荐模型
let recommended = sdk.ffmpeg_generator.recommend_model_for_resolution(1080);
println!("1080p 推荐模型: {:?}", recommended);

// 使用推荐模型创建模板
let optimized_template = TemplateBuilder::new("优化模板")
    .enable_enhancement(&recommended[0])
    .build()?;
```

### 4. 平台特定的编码器筛选

```rust
// 获取 Windows 兼容的编码器
let windows_encoders = sdk.ffmpeg_generator.get_compatible_video_encoders("windows", None);

// 获取支持 NVIDIA GPU 的编码器
let nvidia_encoders = sdk.ffmpeg_generator.get_compatible_video_encoders("windows", Some("nvidia"));

// 获取支持 MP4 格式的编码器
let mp4_encoders = sdk.ffmpeg_generator.get_encoders_for_extension("mp4");
```

## 常用模板示例

### 1. 4K 上采样

```rust
let upscale_4k = TemplateBuilder::new("4K 上采样")
    .enable_enhancement("prob-4")
    .resolution(3840, 2160)
    .video_codec("hevc_nvenc", Some(18))
    .audio_settings("AAC", 256, 2)
    .build()?;
```

### 2. 60fps 插帧

```rust
let fps_60 = TemplateBuilder::new("60fps 插帧")
    .enable_frame_interpolation("chr-2", 1.0)
    .output_settings(0, 60.0)  // 原始尺寸，60fps
    .build()?;
```

### 3. 降噪处理

```rust
let denoise = TemplateBuilder::new("降噪处理")
    .enable_enhancement("nyx-3")  // 使用 Nyx 降噪模型
    .enhancement_params(60, 10, 5)  // 高降噪，低细节增强
    .build()?;
```

### 4. 稳定化处理

```rust
let stabilize = TemplateBuilder::new("视频稳定")
    .enable_stabilization(70, 0)  // 高平滑度，自动裁剪
    .build()?;
```

### 5. 动画优化

```rust
let animation = TemplateBuilder::new("动画优化")
    .enable_enhancement("art-2")  // 使用 Artemis 动画模型
    .ai_engine("artemis")
    .enhancement_params(15, 40, 25)
    .build()?;
```

### 6. HDR 处理

```rust
let hdr = TemplateBuilder::new("HDR 处理")
    .enable_enhancement("hyp-1")  // 使用 Hyperion HDR 模型
    .video_codec("hevc_nvenc", Some(16))
    .color_settings(
        "bt2020nc",
        "bt2020",
        "smpte2084"
    )
    .build()?;
```

## 批处理

```rust
let input_files = vec![
    "video1.mp4".to_string(),
    "video2.mp4".to_string(),
    "video3.mp4".to_string(),
];

let batch_commands = sdk.generate_batch_commands(
    &template,
    &input_files,
    "output_directory"
)?;

for command in batch_commands {
    println!("批处理命令: {}", command);
}
```

## 硬件加速

```rust
// 使用 GPU 加速
let gpu_command = sdk.generate_ffmpeg_command_with_gpu(
    &template,
    "input.mp4",
    "output.mp4",
    "0"  // GPU 设备 ID
)?;

// 自定义编解码器
let custom_command = sdk.generate_ffmpeg_command_with_codec(
    &template,
    "input.mp4",
    "output.mp4",
    "hevc_nvenc",
    Some(18)
)?;
```

## 模板验证

```rust
// 验证模板
sdk.validate_template_for_ffmpeg(&template)?;

// 验证并完善模板
let mut incomplete_template = TemplateBuilder::new("未完成")
    .enable_enhancement("prob-4")
    .build()?;

sdk.validate_and_complete_template(&mut incomplete_template)?;
```

## 错误处理

```rust
match sdk.generate_ffmpeg_command(&template, "input.mp4", "output.mp4") {
    Ok(command) => println!("成功生成命令: {}", command),
    Err(e) => eprintln!("生成命令失败: {}", e),
}
```

## 内置配置说明

SDK 内置了以下配置：

- **音频编解码器**: AAC、AC3、PCM、Vorbis
- **视频编码器**: H.264/H.265 的 NVENC、VideoToolbox、AMF、软件编码器
- **模型推荐规则**: 基于分辨率的智能模型推荐

所有配置都编译到代码中，无需外部文件依赖。

## 调试和诊断

```rust
// 生成编码器报告
let report = sdk.ffmpeg_generator.generate_encoder_report();
println!("{}", report);

// 获取模型映射
let mappings = sdk.get_model_mappings();
for (template_model, ffmpeg_model) in mappings {
    println!("{} -> {}", template_model, ffmpeg_model);
}
```
