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

Posted

技术标签:

【中文标题】如何在 ffmpeg 3.2.0 的多个 nvidia gpu 中选择 gpu?【英文标题】:How to choose gpu among multiple nvidia gpu in ffmpeg 3.2.0? 【发布时间】:2017-06-16 08:47:39 【问题描述】:

我目前正在使用两个 nvidia p4 显卡。

在之前版本的ffmpeg(3.2.0之前)中,我可以使用选项“-gpu 0 or 1 etc”来选择特定的gpu卡。

但是在当前版本中,没有选择gpu卡的选项。

实际上在 nvenc_h264.c 或 nvenc_hevc.c 中指定了“gpu”选项。

但在 nvenc.c 文件中,没有使用“gpu”选项的代码。

有什么方法可以选择特定的卡吗?

两张卡之间的负载均衡是怎么做的?

是在驱动级别完成的吗?

谢谢。

【问题讨论】:

显示您尝试过的完整 ffmpeg 命令及其控制台输出。 如下ffmpeg -y -hwaccel cuvid -gpu 2 -c:v h264_cuvid -i input.mp4 -vf scale_npp=1280:720 -c:v h264_nvenc -gpu 0 output.mp4 对于“-gpu”之后的任何数字,它都有效。它的问题。如果我指出不存在的 gpu,它不应该工作。 我不清楚。因此,如果索引有效,则 GPU 选择有效,否则无效? 【参考方案1】:

我也有同样的问题。转码时,不管我用-gpu选择哪个gpu 选项,ffmpeg 总是使用 gpu #0。

我设法通过使用 -hwaccel_device # 而不是 -gpu 来解决它

例如:

ffmpeg -hwaccel_device 0 -hwaccel cuvid -c:v h264_cuvid -i <input> -b:v 2048k -vf scale_npp=1280:-1 -c:v h264_nvenc -y <output>

【讨论】:

【参考方案2】:

如果自动负载平衡对你来说足够好,你可以做以下事情

    if (ctx->codec_id == AV_CODEC_ID_H264)
         av_opt_set(ctx->priv_data, "gpu", "any", 0);
     

-gpu 任意/列表

如果您正在寻找命令行,请查看this 帖子

【讨论】:

以上是关于如何在 ffmpeg 3.2.0 的多个 nvidia gpu 中选择 gpu?的主要内容,如果未能解决你的问题,请参考以下文章

如何在ffmpeg中同步多个rtsp输入?

关于ffmpeg推流,如何推流一个文件夹里的所有视频或者多个视频?

如何在FFMpeg中连接两个或多个具有相同宽度和不同高度的视频并保持相同的纵横比?

如何运行命令行 FFMPEG 并接受多个管道(视频和音频)而不阻塞第一个输入?

ffmpeg如何批量切割视频尾部4秒?

如何利用批处理和ffmpeg视频解帧将多个mp4文件解成图片?