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硬件加速 优势: - 无外部依赖,部署简单 - 启动速度快,内存占用小 - 向后兼容,不影响现有代码 - 完整中文注释,提升可读性
This commit is contained in:
228
cargos/tvai-v2/README_FFMPEG_CONFIG.md
Normal file
228
cargos/tvai-v2/README_FFMPEG_CONFIG.md
Normal file
@@ -0,0 +1,228 @@
|
||||
# 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. 或者通过代码动态添加编码器配置
|
||||
Reference in New Issue
Block a user