如何使用 ffmpeg API 指定 GPU?

Posted

技术标签:

【中文标题】如何使用 ffmpeg API 指定 GPU?【英文标题】:How can I specify a GPU using ffmpeg API? 【发布时间】:2021-10-12 23:45:53 【问题描述】:

据我所知,它可以在命令行中使用-hwaccel_device-gpu 指定GPU 设备,但是如何在使用API​​ 时指定GPU?

我试图在 ffmpeg.c 中找到它,而对于 c++ 和 ffmpeg 的新手来说这太复杂了。

我可以使用 AVDictionary 吗?什么是关键字?

如果有人能提供一些提示,将不胜感激!

【问题讨论】:

【参考方案1】:

我终于通过阅读OpenCV的源代码解决了这个问题。 关键API是

int av_hwdevice_ctx_create(AVBufferRef **device_ctx, enum AVHWDeviceType type, const char *device, AVDictionary *opts, int flags).

OpenCV 的cap_ffmpeg_hw.hpp 中的源代码:

char device[128] = "";
char* pdevice = NULL;
if (hw_device >= 0 && hw_device < 100000) 
    if (child_type == AV_HWDEVICE_TYPE_VAAPI) 
       snprintf(device, sizeof(device), "/dev/dri/renderD%d", 128 + hw_device);
    else 
       snprintf(device, sizeof(device), "%d", hw_device);
    
     pdevice = device;

const char* hw_child_name = av_hwdevice_get_type_name(child_type);const char* device_name = pdevice ? pdevice : "'default'";
int err = av_hwdevice_ctx_create(&hw_device_ctx, child_type, pdevice, NULL, 0);

【讨论】:

以上是关于如何使用 ffmpeg API 指定 GPU?的主要内容,如果未能解决你的问题,请参考以下文章

如何在ffmpeg中指定nvenc使用的GPU [关闭]

如何在 ffmpeg 3.2.0 的多个 nvidia gpu 中选择 gpu?

编码时如何让FFMPEG使用更多GPU

如何在ffmpeg中指定nvenc要使用的GPU [关闭]

如何使用ffmpeg gpu编码将视频帧保存到内存中?

使用 Nvidia GPU 加速的 Ffmpeg 帧提取抛出“输出文件 #0 不包含任何流”