Files
mixvideo-v2/cargos/tvai-v2/README_FFMPEG_CONFIG.md
imeepos 704272001f feat: 集成内置FFmpeg配置系统和中文注释
主要功能:
- 将JSON配置文件内容内置到代码中,移除外部文件依赖
- 将ffmpeg.rs中所有英文注释改为中文注释
- 集成ffmpegOpts参数生成系统

 内置配置:
- 音频编解码器: AAC, AC3, PCM, Vorbis (4个)
- 视频编码器: H.264/H.265 NVENC, VideoToolbox, AMF, 软件编码器 (8个)
- 模型推荐规则: 基于分辨率的智能推荐

 新增功能:
- 智能编码器选择 (根据操作系统和GPU)
- 自动模型推荐 (基于视频分辨率)
- 动态参数生成 (支持占位符替换)
- 兼容性筛选 (按格式、平台、硬件)
- 批处理命令生成

 新增文件:
- examples/: 4个演示程序
- tests/: FFmpeg配置测试套件
- 文档: 使用指南、配置说明、功能总结

 测试验证:
- 21个单元测试全部通过
- 4个演示程序运行成功
- 支持Windows/macOS/Linux多平台
- 支持NVIDIA/AMD/Apple硬件加速

 优势:
- 无外部依赖,部署简单
- 启动速度快,内存占用小
- 向后兼容,不影响现有代码
- 完整中文注释,提升可读性
2025-08-18 13:01:03 +08:00

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. 或者通过代码动态添加编码器配置