feat: 完善Topaz Video AI SDK并重新组织models目录结构

主要改进:
 AI引擎和基准测试支持:
- 完整支持所有AI引擎标志 (Artemis, Gaia, Theia, Proteus, Iris)
- 实现引擎特定的参数优化和FFmpeg命令生成
- 添加基准测试模板和性能测试功能
- 新增专用预设模板 (animation_enhance, detail_recovery等)

 音频编码器智能化:
- 完善音频编码器配置和自动选择
- 支持AAC, AC3, PCM, Vorbis等多种编码器
- 实现质量级别自动映射和容器格式兼容性检查
- 添加音频编码器演示示例

 目录结构重新组织:
- 将models目录按功能分类重新组织
- 视觉-语言模型配置 -> 视觉-语言模型配置/
- 编码解码配置 -> 编码解码配置/
- 基准测试配置 -> config/
- 其他配置文件 -> 其他配置/

 技术增强:
- 增强TemplateBuilder功能 (ai_engine, focus_fix_level, benchmark_mode等)
- 完善FFmpeg参数生成和模型映射
- 添加智能推荐系统和性能优化
- 新增多个演示示例 (benchmarks_demo, audio_codecs_demo等)

 完整性提升:
- 模板属性使用率达到100%
- 所有AI引擎和编码器都有明确用途和处理方案
- 完整的文档分析和使用指南
This commit is contained in:
imeepos
2025-08-15 15:04:56 +08:00
parent bf880a55a6
commit 5380d9973f
164 changed files with 698 additions and 62 deletions

View File

@@ -0,0 +1,166 @@
use tvai_sdk::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("Topaz Video AI SDK - Audio Codecs Demo");
println!("=====================================");
let sdk = TvaiSdk::new();
// Example 1: AAC Audio (Most Common)
println!("\n1. AAC Audio Codec (Universal Compatibility):");
let aac_template = TemplateBuilder::new("AAC Demo")
.description("Universal compatibility with AAC audio")
.enable_enhancement("prob-4")
.enhancement_params(20, 25, 15)
.resolution(1920, 1080)
.video_codec("libx264", Some(23))
.container_format("mp4") // Auto-selects AAC
.audio_settings_optimized("aac", "high") // 256 kbps
.build()?;
println!(" Template: {}", aac_template.name);
println!(" Audio Codec: {}", aac_template.settings.output.audio_codec.as_ref().unwrap_or(&"None".to_string()));
println!(" Audio Bitrate: {} kbps", aac_template.settings.output.audio_bitrate.unwrap_or(0));
println!(" Audio Channels: {}", aac_template.settings.output.audio_channels.unwrap_or(0));
let aac_command = sdk.generate_ffmpeg_command(&aac_template, "input.mp4", "output_aac.mp4")?;
println!(" Command:");
println!(" {}", aac_command);
// Example 2: AC3 Audio (Surround Sound)
println!("\n2. AC3 Audio Codec (Dolby Digital 5.1):");
let ac3_template = TemplatePresets::broadcast_ready()?;
println!(" Template: {}", ac3_template.name);
println!(" Audio Codec: {}", ac3_template.settings.output.audio_codec.as_ref().unwrap_or(&"None".to_string()));
println!(" Audio Bitrate: {} kbps", ac3_template.settings.output.audio_bitrate.unwrap_or(0));
println!(" Audio Channels: {} (5.1 Surround)", ac3_template.settings.output.audio_channels.unwrap_or(0));
let ac3_command = sdk.generate_ffmpeg_command(&ac3_template, "input.mp4", "output_ac3.mp4")?;
println!(" Command:");
println!(" {}", ac3_command);
// Example 3: PCM Audio (Lossless)
println!("\n3. PCM Audio Codec (Lossless Professional):");
let pcm_template = TemplatePresets::professional_master()?;
println!(" Template: {}", pcm_template.name);
println!(" Audio Codec: {}", pcm_template.settings.output.audio_codec.as_ref().unwrap_or(&"None".to_string()));
println!(" Audio Quality: Lossless (no bitrate limit)");
println!(" Audio Channels: {}", pcm_template.settings.output.audio_channels.unwrap_or(0));
let pcm_command = sdk.generate_ffmpeg_command(&pcm_template, "input.mp4", "output_pcm.mov")?;
println!(" Command:");
println!(" {}", pcm_command);
// Example 4: Vorbis Audio (Web Optimized)
println!("\n4. Vorbis Audio Codec (Web/Open Source):");
let vorbis_template = TemplatePresets::web_optimized()?;
println!(" Template: {}", vorbis_template.name);
println!(" Audio Codec: {}", vorbis_template.settings.output.audio_codec.as_ref().unwrap_or(&"None".to_string()));
println!(" Container: WebM (Web optimized)");
println!(" Audio Channels: {}", vorbis_template.settings.output.audio_channels.unwrap_or(0));
let vorbis_command = sdk.generate_ffmpeg_command(&vorbis_template, "input.mp4", "output_web.webm")?;
println!(" Command:");
println!(" {}", vorbis_command);
// Example 5: Audio Quality Comparison
println!("\n5. Audio Quality Comparison (AAC):");
let qualities = vec![
("Low", "low", 128),
("Medium", "medium", 192),
("High", "high", 256),
("Highest", "highest", 320),
];
for (name, quality, expected_bitrate) in qualities {
let template = TemplateBuilder::new(&format!("AAC {}", name))
.enable_enhancement("prob-4")
.audio_settings_optimized("aac", quality)
.build()?;
let actual_bitrate = template.settings.output.audio_bitrate.unwrap_or(0);
println!(" {} Quality: {} kbps (expected: {} kbps)", name, actual_bitrate, expected_bitrate);
let command = sdk.generate_ffmpeg_command(&template, "input.mp4", &format!("output_{}.mp4", quality))?;
println!(" Command: {}", command);
}
// Example 6: Container Format Auto-Selection
println!("\n6. Container Format Auto-Selection:");
let formats = vec![
("MP4", "mp4", "aac"),
("MOV", "mov", "aac"),
("MKV", "mkv", "aac"),
("WebM", "webm", "vorbis"),
];
for (name, format, expected_codec) in formats {
let template = TemplateBuilder::new(&format!("{} Container", name))
.enable_enhancement("prob-4")
.container_format(format) // Auto-selects compatible audio codec
.build()?;
let actual_codec = template.settings.output.audio_codec.as_ref().map(|s| s.as_str()).unwrap_or("None");
println!(" {} Container: Auto-selected {} audio (expected: {})", name, actual_codec, expected_codec);
}
// Example 7: Custom Audio Settings
println!("\n7. Custom Audio Settings:");
let custom_template = TemplateBuilder::new("Custom Audio")
.description("Custom audio configuration example")
.enable_enhancement("prob-4")
.enhancement_params(25, 30, 20)
.resolution(1920, 1080)
.video_codec("libx264", Some(23))
.audio_settings("aac", 256, 2) // Manual settings
.build()?;
println!(" Template: {}", custom_template.name);
println!(" Manual Audio Settings:");
println!(" Codec: {}", custom_template.settings.output.audio_codec.as_ref().unwrap_or(&"None".to_string()));
println!(" Bitrate: {} kbps", custom_template.settings.output.audio_bitrate.unwrap_or(0));
println!(" Channels: {}", custom_template.settings.output.audio_channels.unwrap_or(0));
let custom_command = sdk.generate_ffmpeg_command(&custom_template, "input.mp4", "output_custom.mp4")?;
println!(" Command:");
println!(" {}", custom_command);
// Example 8: Use Case Recommendations
println!("\n8. Audio Codec Use Case Recommendations:");
println!(" 🎵 AAC:");
println!(" • Best for: General video, streaming, mobile devices");
println!(" • Bitrates: 128-320 kbps");
println!(" • Containers: MP4, MOV, MKV, AVI");
println!(" • Channels: Stereo (2.0)");
println!("\n 🎭 AC3 (Dolby Digital):");
println!(" • Best for: Home theater, broadcast, DVD/Blu-ray");
println!(" • Bitrates: 160-640 kbps");
println!(" • Containers: MP4, MOV, MKV, AVI");
println!(" • Channels: Up to 5.1 surround");
println!("\n 🎼 PCM:");
println!(" • Best for: Professional mastering, archival");
println!(" • Quality: Lossless (no compression)");
println!(" • Containers: MOV, MKV, AVI (not MP4)");
println!(" • Channels: Stereo or multi-channel");
println!("\n 🌐 Vorbis:");
println!(" • Best for: Web content, open source projects");
println!(" • Quality: Variable bitrate encoding");
println!(" • Containers: WebM only");
println!(" • Channels: Stereo (2.0)");
println!("\n✅ Audio codecs demo completed successfully!");
println!("\nKey Features Demonstrated:");
println!(" • Automatic audio codec selection based on container");
println!(" • Quality-based bitrate optimization");
println!(" • Multi-channel audio support (stereo vs surround)");
println!(" • Lossless vs lossy audio options");
println!(" • Web-optimized audio encoding");
println!(" • Professional mastering workflows");
Ok(())
}

View File

@@ -0,0 +1,175 @@
use tvai_sdk::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("Topaz Video AI SDK - Benchmarks Demo");
println!("===================================");
let sdk = TvaiSdk::new();
// Example 1: Image Enhancement Benchmarks
println!("\n1. Image Enhancement Benchmarks:");
let enhancement_engines = vec![
("Artemis", "alq-13", "Animation/Cartoon optimization"),
("Iris", "iris-3", "Low-light/Noise processing"),
("Proteus", "prob-4", "General purpose enhancement"),
("Gaia", "ghq-5", "Natural scene optimization"),
("Nyx", "nyx-2", "Noise reduction specialist"),
];
for (engine, model, description) in enhancement_engines {
println!("\n {} Engine ({}):", engine, description);
// Test different scales
let scales = if engine == "Nyx" { vec![1, 2] } else { vec![1, 2, 4] };
for scale in scales {
let template = TemplateBuilder::benchmark_template(engine, scale)?;
let command = sdk.generate_ffmpeg_command(&template, "input.mp4", &format!("benchmark_{}_{}.mp4", engine.to_lowercase(), scale))?;
println!(" {}X Scale: {}", scale, command);
}
}
// Example 2: Specialized Enhancement Benchmarks
println!("\n2. Specialized Enhancement Benchmarks:");
// Rhea - 4X only
let rhea_template = TemplateBuilder::benchmark_template("rhea", 4)?;
let rhea_command = sdk.generate_ffmpeg_command(&rhea_template, "input.mp4", "benchmark_rhea_4x.mp4")?;
println!(" Rhea 4X (Specialized): {}", rhea_command);
// RXL - 4X ultra-high quality
let rxl_template = TemplateBuilder::benchmark_template("rxl", 4)?;
let rxl_command = sdk.generate_ffmpeg_command(&rxl_template, "input.mp4", "benchmark_rxl_4x.mp4")?;
println!(" RXL 4X (Ultra-HQ): {}", rxl_command);
// Hyperion HDR - 1X only
let hdr_template = TemplateBuilder::benchmark_template("hyperion", 1)?;
let hdr_command = sdk.generate_ffmpeg_command(&hdr_template, "input.mp4", "benchmark_hdr.mp4")?;
println!(" Hyperion HDR: {}", hdr_command);
// Example 3: Frame Interpolation Benchmarks
println!("\n3. Frame Interpolation Benchmarks:");
// 4X Slow Motion engines
let slowmo_4x_engines = vec![
("Apollo", "apo-8", "High quality interpolation"),
("APFast", "apf-1", "Fast interpolation"),
("Chronos", "chr-2", "Balanced quality/speed"),
("CHFast", "chf-3", "Fast interpolation"),
];
for (engine, model, description) in slowmo_4x_engines {
let template = TemplateBuilder::new(&format!("Benchmark {} 4X Slowmo", engine))
.description(&format!("{} - 4X slow motion benchmark", description))
.enable_enhancement("prob-4") // Base enhancement
.enable_frame_interpolation(model, 4.0) // 4X slow motion
.benchmark_mode(true)
.build()?;
let command = sdk.generate_ffmpeg_command(&template, "input.mp4", &format!("benchmark_slowmo_{}_{}.mp4", engine.to_lowercase(), 4))?;
println!(" {} 4X ({}): {}", engine, description, command);
}
// 16X Slow Motion - Aion only
let aion_template = TemplateBuilder::new("Benchmark Aion 16X Slowmo")
.description("Aion ultra-high slow motion benchmark")
.enable_enhancement("prob-4")
.enable_frame_interpolation("aion-1", 16.0) // 16X slow motion
.benchmark_mode(true)
.build()?;
let aion_command = sdk.generate_ffmpeg_command(&aion_template, "input.mp4", "benchmark_slowmo_aion_16x.mp4")?;
println!(" Aion 16X (Ultra-slow): {}", aion_command);
// Example 4: Performance Comparison Templates
println!("\n4. Performance Comparison Templates:");
// Compare different engines at 2X scale
println!(" 2X Upscaling Comparison:");
let comparison_engines = vec!["Artemis", "Iris", "Proteus", "Gaia"];
for engine in comparison_engines {
let template = TemplateBuilder::benchmark_template(engine, 2)?;
let command = sdk.generate_ffmpeg_command(&template, "test_input.mp4", &format!("compare_2x_{}.mp4", engine.to_lowercase()))?;
println!(" {}: {}", engine, command);
}
// Example 5: Benchmark Mode Features
println!("\n5. Benchmark Mode Features:");
let normal_template = TemplateBuilder::new("Normal Template")
.description("Normal processing template")
.enable_enhancement("prob-4")
.enhancement_params(25, 30, 20)
.enable_stabilization(60, 1)
.audio_settings("aac", 192, 2)
.build()?;
let benchmark_template = TemplateBuilder::new("Benchmark Template")
.description("Benchmark mode template")
.enable_enhancement("prob-4")
.enhancement_params(0, 0, 0) // No additional processing
.benchmark_mode(true) // Disables non-essential features
.build()?;
println!(" Normal Template Features:");
println!(" Stabilization: {}", normal_template.settings.stabilize.active);
println!(" Grain: {}", normal_template.settings.grain.active);
println!(" Audio: {}", normal_template.settings.output.audio_codec.is_some());
println!(" Benchmark Template Features:");
println!(" Stabilization: {}", benchmark_template.settings.stabilize.active);
println!(" Grain: {}", benchmark_template.settings.grain.active);
println!(" Audio: {}", benchmark_template.settings.output.audio_codec.is_some());
let normal_command = sdk.generate_ffmpeg_command(&normal_template, "input.mp4", "normal_output.mp4")?;
let benchmark_command = sdk.generate_ffmpeg_command(&benchmark_template, "input.mp4", "benchmark_output.mp4")?;
println!(" Normal Command: {}", normal_command);
println!(" Benchmark Command: {}", benchmark_command);
// Example 6: Engine Capabilities Summary
println!("\n6. Engine Capabilities Summary:");
println!(" 📊 Scaling Capabilities:");
println!(" Artemis: 1X ✅ 2X ✅ 4X ✅ (Animation optimized)");
println!(" Iris: 1X ✅ 2X ✅ 4X ✅ (Low-light optimized)");
println!(" Proteus: 1X ✅ 2X ✅ 4X ✅ (General purpose)");
println!(" Gaia: 1X ✅ 2X ✅ 4X ✅ (Natural scenes)");
println!(" Nyx: 1X ✅ 2X ✅ 4X ❌ (Noise reduction)");
println!(" Nyx Fast: 1X ✅ 2X ❌ 4X ❌ (Fast noise reduction)");
println!(" Rhea: 1X ❌ 2X ❌ 4X ✅ (Specialized 4X)");
println!(" RXL: 1X ❌ 2X ❌ 4X ✅ (Ultra-high quality 4X)");
println!(" Hyperion: 1X ✅ 2X ❌ 4X ❌ (HDR processing)");
println!("\n 🎬 Frame Interpolation:");
println!(" Apollo: 4X Slowmo ✅ (High quality)");
println!(" APFast: 4X Slowmo ✅ (Fast processing)");
println!(" Chronos: 4X Slowmo ✅ (Balanced)");
println!(" CHFast: 4X Slowmo ✅ (Fast processing)");
println!(" Aion: 16X Slowmo ✅ (Ultra-slow motion)");
println!("\n 🎯 Recommended Use Cases:");
println!(" • Animation/Cartoons: Artemis");
println!(" • Low-light footage: Iris");
println!(" • General content: Proteus");
println!(" • Nature/Landscapes: Gaia");
println!(" • Noisy footage: Nyx/Nyx Fast");
println!(" • Maximum 4X quality: RXL");
println!(" • HDR content: Hyperion");
println!(" • Slow motion: Apollo/Chronos");
println!(" • Ultra-slow motion: Aion");
println!("\n✅ Benchmarks demo completed successfully!");
println!("\nKey Features Demonstrated:");
println!(" • Comprehensive AI engine benchmarking");
println!(" • Scale-specific performance testing");
println!(" • Frame interpolation benchmarks");
println!(" • Benchmark mode optimization");
println!(" • Engine capability comparison");
println!(" • Performance-focused command generation");
Ok(())
}