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

5.6 KiB
Raw Blame History

FFmpeg 内置配置集成

本文档介绍了 Topaz Video AI SDK 中新增的 FFmpeg 内置配置功能。

概述

SDK 现在内置了音频编解码器、视频编码器和模型推荐规则配置,使 FFmpeg 命令生成更加灵活和智能化。所有配置都直接编译到代码中,无需外部配置文件。

内置配置

音频编解码器配置

内置了以下音频编解码器及其参数:

{
    "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"
    }
}

视频编码器配置

内置了以下视频编码器及其参数:

{
    "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"
}

模型推荐规则

内置了基于分辨率的模型推荐规则:

{
    "id": "target-resolution",
    "property": "height",
    "type": "range",
    "conditions": [
        {
            "min": 1,
            "max": 480,
            "recommendedModelValues": ["iris", "artemis"]
        }
    ]
}

新增功能

1. 内置配置加载

SDK 在初始化时自动加载内置配置:

let sdk = TvaiSdk::new(); // 自动加载所有内置配置

2. 音频编解码器查询

// 获取所有可用的音频编解码器
let audio_codecs = sdk.ffmpeg_generator.get_available_audio_codecs();

// 根据名称查找特定编解码器
let aac_codec = sdk.ffmpeg_generator.get_audio_codec("AAC");

3. 视频编码器查询

// 获取所有可用的视频编码器
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. 兼容性筛选

// 获取 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. 自动编码器选择

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. 模型推荐

// 根据分辨率获取推荐模型
let recommended_models = sdk.ffmpeg_generator.recommend_model_for_resolution(1080);
println!("1080p 推荐模型: {:?}", recommended_models);

7. 编码器报告生成

// 生成详细的编码器报告
let report = sdk.ffmpeg_generator.generate_encoder_report();
println!("{}", report);

使用示例

基本用法

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(())
}

高级用法

// 根据目标平台自动选择最佳编码器
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. 或者通过代码动态添加编码器配置