ffmpeg - cuda 编码 - OpenEncodeSessionEx 失败:内存不足

ffmpeg - cuda encode - OpenEncodeSessionEx failed: out of memory

我在使用 GPU (CUDA) 进行 ffmpeg 视频编码时遇到问题。

我有 2 个 nVidia GTX 1050 Ti

当我尝试进行多个并行编码时出现问题。超过 2 个进程和 ffmpeg 像这样死掉:

[h264_nvenc @ 0xcc1cc0] OpenEncodeSessionEx failed: out of memory (10)

问题是 nvidia-smi 显示 gpu 上有很多可用资源:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.66                 Driver Version: 384.66                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 105...  Off  | 00000000:41:00.0 Off |                  N/A |
| 40%   37C    P0    42W /  75W |    177MiB /  4038MiB |     30%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX 105...  Off  | 00000000:42:00.0 Off |                  N/A |
| 40%   21C    P8    35W /  75W |     10MiB /  4038MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

第二个 GPU 似乎根本没有使用,第一个 GPU 上剩余的内存绰绰有余,可以支持第三个文件。

任何想法都会非常有帮助!

  1. 由于没有关于如何应用编码上下文的代码,我不知道为什么不使用第二个 gpu。您是否在 av_opt_set() 或命令行参数中指定使用它?
  2. 这里更重要的问题是geforce卡在一个系统中不能拥有超过2个编码会话。如果你需要更多,你必须使用那些昂贵的,如 quadro、tesla 等。

实际上您的显卡是 'non-qualified'(就 NVIDIA 而言)并且仅支持 2 个同时会话。您可以咨询 https://developer.nvidia.com/video-encode-decode-gpu-support-matrix#Encoder or download NVENC SDK, which contains pdf with license terms for qualified and non-qualified GPUs. There are some patches for drivers which disables session count checking, you could try them https://github.com/keylase/nvidia-patch