You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过FFmpeg API指定GPU设备?

How to Specify GPU Device via FFmpeg API Using AVDictionary

我太懂你作为FFmpeg和C++新手看ffmpeg.c的崩溃感了——那文件的复杂度简直劝退新人!不过别担心,你完全可以通过AVDictionary来指定GPU设备,不用死磕命令行的实现代码。

核心关键词与用法

是的,AVDictionary完全能实现这个需求,对应不同硬件加速后端的关键词主要有这些:

  • 通用参数:"hwaccel_device",和命令行的-hwaccel_device参数完全对应。你可以把设备编号(比如"0"代表第一块GPU)、设备路径或设备名称作为值传入。
  • NVIDIA专属参数:"gpu",对应命令行的-gpu参数,用来指定GPU的编号,适合CUDA加速场景。

简单示例代码

这里给你一个极简的C++示例,展示怎么在打开输入流时传入GPU设备参数:

#include <libavformat/avformat.h>

int main() {
    AVFormatContext* fmt_ctx = nullptr;
    const char* input_url = "your_input_file.mp4";
    AVDictionary* opts = nullptr;

    // 指定第0号GPU设备(通用方式)
    av_dict_set(&opts, "hwaccel_device", "0", 0);
    // 如果是NVIDIA CUDA,也可以用专属参数
    // av_dict_set(&opts, "gpu", "0", 0);

    // 打开输入流时传入参数字典
    int ret = avformat_open_input(&fmt_ctx, input_url, nullptr, &opts);
    if (ret < 0) {
        // 处理错误
        return ret;
    }

    // 后续操作...

    // 记得释放资源
    avformat_close_input(&fmt_ctx);
    av_dict_free(&opts);
    return 0;
}

额外提示

不同硬件加速后端的设备标识格式可能有差异:

  • Intel QSV可能需要传入设备路径(比如"/dev/dri/renderD128")
  • AMD AMF可能用设备名称(比如"AMF")
    你可以先通过FFmpeg命令行测试-hwaccel_device的有效取值,再直接移植到API的AVDictionary中。另外,如果是解码场景,也可以在调用avcodec_open2打开解码器时传入这个参数字典。

内容的提问来源于stack exchange,提问作者idontidontknowknow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 04:27:29