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

火山引擎 最新活动