mixvideo-v2/cargos/tvai-v2/examples/basic_usage.rs

137 lines
5.2 KiB
Rust

use tvai_sdk::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("Topaz Video AI SDK - Basic Usage Example");
println!("=========================================");
// Create a new SDK instance
let mut sdk = TvaiSdk::new();
// Example 1: Create templates using presets
println!("\n1. Creating templates using presets:");
let upscale_template = TemplatePresets::upscale_to_4k()?;
println!(" Created: {}", upscale_template.name);
let fps_template = TemplatePresets::convert_to_60fps()?;
println!(" Created: {}", fps_template.name);
let denoise_template = TemplatePresets::remove_noise()?;
println!(" Created: {}", denoise_template.name);
// Add templates to SDK
sdk.add_template(upscale_template.clone())?;
sdk.add_template(fps_template.clone())?;
sdk.add_template(denoise_template.clone())?;
println!(" Total templates loaded: {}", sdk.template_count());
// Example 2: Generate FFmpeg commands
println!("\n2. Generating FFmpeg commands:");
let input_file = "input_video.mp4";
let output_file = "output_video.mp4";
// Basic command generation
let command = sdk.generate_ffmpeg_command(&upscale_template, input_file, output_file)?;
println!(" Basic upscale command:");
println!(" {}", command);
// Command with GPU acceleration
let gpu_command = sdk.generate_ffmpeg_command_with_gpu(&upscale_template, input_file, "output_gpu.mp4", "0")?;
println!("\n GPU accelerated command:");
println!(" {}", gpu_command);
// Command with custom codec
let nvenc_command = sdk.generate_ffmpeg_command_with_codec(&upscale_template, input_file, "output_nvenc.mp4", "hevc_nvenc", Some(20))?;
println!("\n NVENC H.265 command:");
println!(" {}", nvenc_command);
// Example 3: Create custom template using builder
println!("\n3. Creating custom template:");
let custom_template = TemplateBuilder::new("Custom Enhancement")
.description("Custom video enhancement with multiple effects")
.author("Example User")
.enable_enhancement("prob-4")
.enhancement_params(25, 15, 5) // denoise=25, detail=15, sharpen=5
.enable_stabilization(70, 1) // smoothness=70, full frame
.enable_grain(3, 2) // grain amount=3, size=2
.output_settings(6, 0.0) // FHD output, original FPS
.build()?;
println!(" Created custom template: {}", custom_template.name);
println!(" Description: {}", custom_template.description);
println!(" Enhancement active: {}", custom_template.settings.enhance.active);
println!(" Stabilization active: {}", custom_template.settings.stabilize.active);
println!(" Grain active: {}", custom_template.settings.grain.active);
// Generate command for custom template
let custom_command = sdk.generate_ffmpeg_command(&custom_template, input_file, "custom_output.mp4")?;
println!("\n Custom template command:");
println!(" {}", custom_command);
// Example 4: Batch processing
println!("\n4. Batch processing:");
let input_files = vec![
"video1.mp4".to_string(),
"video2.mp4".to_string(),
"video3.mp4".to_string(),
"video4.mp4".to_string(),
];
let batch_commands = sdk.generate_batch_commands(&fps_template, &input_files, "./output")?;
println!(" Generated {} batch commands:", batch_commands.len());
for (i, command) in batch_commands.iter().enumerate() {
println!(" Batch {}: {}", i + 1, command);
}
// Example 5: Template validation
println!("\n5. Template validation:");
// Validate template for FFmpeg generation
match sdk.validate_template_for_ffmpeg(&upscale_template) {
Ok(()) => println!(" Upscale template is valid for FFmpeg generation"),
Err(e) => println!(" Validation error: {}", e),
}
// Example 6: Export and import templates
println!("\n6. Template export/import:");
// Export all templates to JSON
let json_export = sdk.export_templates_to_json()?;
println!(" Exported {} templates to JSON ({} bytes)", sdk.template_count(), json_export.len());
// Clear templates and import them back
sdk.clear_templates();
println!(" Cleared all templates. Count: {}", sdk.template_count());
let imported_count = sdk.import_templates_from_json(&json_export)?;
println!(" Imported {} templates from JSON. Count: {}", imported_count, sdk.template_count());
// Example 7: Template management
println!("\n7. Template management:");
// List all template names
let template_names = sdk.get_template_names();
println!(" Available templates:");
for name in template_names {
println!(" - {}", name);
}
// Find specific template
if let Some(template) = sdk.find_template("Upscale to 4K") {
println!(" Found template: {} (Author: {})", template.name, template.author);
}
// Check if template exists
println!(" Has 'Convert to 60 FPS' template: {}", sdk.has_template("Convert to 60 FPS"));
println!(" Has 'Non-existent' template: {}", sdk.has_template("Non-existent"));
println!("\n✅ Basic usage example completed successfully!");
Ok(())
}