mixvideo-v2/cargos/tvai-v2/README_FFMPEG_CONFIG.md

229 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# FFmpeg 内置配置集成
本文档介绍了 Topaz Video AI SDK 中新增的 FFmpeg 内置配置功能。
## 概述
SDK 现在内置了音频编解码器、视频编码器和模型推荐规则配置,使 FFmpeg 命令生成更加灵活和智能化。所有配置都直接编译到代码中,无需外部配置文件。
## 内置配置
### 音频编解码器配置
内置了以下音频编解码器及其参数:
```json
{
"name": "AAC",
"ffmpegOpts": "aac -ac 2",
"ext": ["mp4", "mov", "mkv", "avi"],
"bitrate": {
"min": 32,
"minRec": 128,
"max": 320,
"default": 320,
"suggested": [128, 160, 192, 256, 320],
"ffmpegOpt": "-b:a <BITRATE>k"
}
}
```
### 视频编码器配置
内置了以下视频编码器及其参数:
```json
{
"id": "h264-high-win-nvidia",
"encoder": "H264",
"profile": "High",
"ffmpegOpts": "-c:v h264_nvenc -profile:v high -pix_fmt yuv420p -g 30",
"bitrateOpts": {
"cbr": "-rc cbr -b:v <CONST_BITRATE_VALUE> -preset p6",
"vbr": "-preset p7 -tune hq -rc constqp -qp <QP_VALUE>"
},
"cqpValues": {
"High": [18],
"Mid": [25],
"Low": [28]
},
"ext": ["mov", "mkv", "mp4"],
"os": "windows|linux",
"device": "nvidia|tesla"
}
```
### 模型推荐规则
内置了基于分辨率的模型推荐规则:
```json
{
"id": "target-resolution",
"property": "height",
"type": "range",
"conditions": [
{
"min": 1,
"max": 480,
"recommendedModelValues": ["iris", "artemis"]
}
]
}
```
## 新增功能
### 1. 内置配置加载
SDK 在初始化时自动加载内置配置:
```rust
let sdk = TvaiSdk::new(); // 自动加载所有内置配置
```
### 2. 音频编解码器查询
```rust
// 获取所有可用的音频编解码器
let audio_codecs = sdk.ffmpeg_generator.get_available_audio_codecs();
// 根据名称查找特定编解码器
let aac_codec = sdk.ffmpeg_generator.get_audio_codec("AAC");
```
### 3. 视频编码器查询
```rust
// 获取所有可用的视频编码器
let video_encoders = sdk.ffmpeg_generator.get_available_video_encoders();
// 根据ID查找编码器
let encoder = sdk.ffmpeg_generator.get_video_encoder("h264-high-win-nvidia");
// 根据名称查找编码器
let h264_encoder = sdk.ffmpeg_generator.get_video_encoder_by_name("H264");
```
### 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");
```
### 5. 自动编码器选择
```rust
let template = TemplateBuilder::new("自动选择")
.enable_enhancement("prob-4")
.build()?;
// 自动选择适合的编码器
let command = sdk.ffmpeg_generator.generate_with_auto_encoder(
&template,
"input.mp4",
"output.mp4",
"windows", // 目标操作系统
Some("nvidia") // GPU 类型
)?;
```
### 6. 模型推荐
```rust
// 根据分辨率获取推荐模型
let recommended_models = sdk.ffmpeg_generator.recommend_model_for_resolution(1080);
println!("1080p 推荐模型: {:?}", recommended_models);
```
### 7. 编码器报告生成
```rust
// 生成详细的编码器报告
let report = sdk.ffmpeg_generator.generate_encoder_report();
println!("{}", report);
```
## 使用示例
### 基本用法
```rust
use tvai_v2::{TvaiSdk, TemplateBuilder};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let sdk = TvaiSdk::new();
// 创建模板,使用配置文件中的编解码器
let template = TemplateBuilder::new("高质量编码")
.enable_enhancement("prob-4")
.video_codec("H264", Some(23))
.audio_settings("AAC", 192, 2)
.build()?;
// 生成 FFmpeg 命令
let command = sdk.generate_ffmpeg_command(&template, "input.mp4", "output.mp4")?;
println!("FFmpeg 命令: {}", command);
Ok(())
}
```
### 高级用法
```rust
// 根据目标平台自动选择最佳编码器
let auto_command = sdk.ffmpeg_generator.generate_with_auto_encoder(
&template,
"input.mp4",
"output.mp4",
"windows",
Some("nvidia")
)?;
// 获取推荐模型并创建优化模板
let recommended = sdk.ffmpeg_generator.recommend_model_for_resolution(2160);
let optimized_template = TemplateBuilder::new("4K 优化")
.enable_enhancement(&recommended[0])
.build()?;
```
## 内置编码器支持
### 音频编解码器
- **AAC**: 支持 MP4、MOV、MKV、AVI 格式,比特率范围 32-320 kbps
- **AC3**: 支持 MP4、MOV、MKV、AVI 格式,比特率范围 160-640 kbps
- **PCM**: 支持 MOV、MKV、AVI 格式,无损音频
- **Vorbis**: 支持 WebM 格式
### 视频编码器
- **H.264 NVENC**: NVIDIA GPU 硬件加速编码
- **H.265 NVENC**: NVIDIA GPU 硬件加速 HEVC 编码
- **H.264 VideoToolbox**: macOS 硬件加速编码
- **H.265 VideoToolbox**: macOS 硬件加速 HEVC 编码
- **H.264 AMF**: AMD GPU 硬件加速编码
- **H.265 AMF**: AMD GPU 硬件加速 HEVC 编码
- **libx264**: 软件 H.264 编码(跨平台)
- **libx265**: 软件 H.265 编码(跨平台)
## 错误处理
内置配置解析失败时SDK 会:
1. 返回配置错误信息
2. 回退到基本的编码器设置
3. 确保基本功能仍然可用
## 扩展配置
如需添加更多编码器或修改配置,可以:
1. 修改 `ffmpeg.rs` 中的内置 JSON 字符串
2. 重新编译项目
3. 或者通过代码动态添加编码器配置