PyNvVideoCodec fails with nvidia drivers > 580.100

I have this Dockerfile:

FROM nvcr.io/nvidia/pytorch:25.03-py3

RUN apt-get update && apt-get install -y \ yasm pkg-config libgnutls28-dev libdrm-dev libva-dev libvdpau-dev libxcb1-dev \ libxcb-shm0-dev libxcb-xfixes0-dev libssl-dev \ libx264-dev libx265-dev libnuma-dev libvpx-dev libfdk-aac-dev libmp3lame-dev \ libopus-dev libvorbis-dev

# Install NVIDIA Video Codec SDK headers (ffnvcodec) RUN git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git && \ cd nv-codec-headers && \ make && make install && \ cd .. && rm -rf nv-codec-headers

# Build and install ffmpeg 7.1 (provides v61 libraries that PyNvVideoCodec expects) RUN wget https://ffmpeg.org/releases/ffmpeg-7.1.tar.gz && \ tar -xzf ffmpeg-7.1.tar.gz && \ cd ffmpeg-7.1 && \ ./configure --prefix=/usr --enable-shared --enable-gpl --enable-nonfree \ --enable-libx264 --enable-libx265 --enable-libvpx --enable-libfdk-aac \ --enable-libmp3lame --enable-libopus --enable-libvorbis \ --enable-gnutls --enable-cuda --enable-cuvid --enable-nvdec --enable-nvenc \ --enable-libdrm --enable-vdpau \ --disable-static \ --enable-pic && \ make -j"$(nproc)" && \ make install && \ ldconfig && \ cd .. && rm -rf ffmpeg-7.1 ffmpeg-7.1.tar.gz WORKDIR /app RUN pip install --no-deps onnxruntime-gpu==1.23.2 ultralytics==8.3.244

# Official fix for OpenCV FFmpeg support in NVIDIA containers

# Remove leftover cv2 bindings and install proper opencv-python

RUN rm -rf /usr/local/lib/python3.*/dist-packages/cv2 && \ pip install opencv-python==4.11.0.86 && \ apt update && apt install -y libgl1-mesa-dev WORKDIR /app/ai-engine

COPY . . RUN pip install -r requirements.txt

WORKDIR /app

# Install PyNvVideoCodec and remove bundled libraries

RUN pip install PyNvVideoCodec==2.0.2 && \ cd /usr/local/lib/python3.12/dist-packages/PyNvVideoCodec && \ rm -f libav*.so* libsw*.so* && \ ldconfig

With this image I launch pods in RunPod or VastAI. I am having inconsistencies per hosts/datacenters where my PyNvVideoCodec fails. Seems like it only works for nvidia drivers <= 580.100. When it fails I either get: terminate called after throwing an instance of ‘PyNvVCException’ what(): HandleVideoSequence : Error code : 100 Error Type : m_api.cuvidGetDecoderCaps(&decodecaps) returned error 100 at /project/src/VideoCodecSDKUtils/helper_classes/NvCodec/NvDecoder/NvDecoder.cpp:257 or Error getting driver version: Failed to load NVENC library: libnvidia-encode.so.1: cannot open shared object file: No such file or directory Error importing PyNvVideoCodec: Failed to load NVENC library: libnvidia-encode.so.1: cannot open shared object file: No such file or directory System: Linux Python version: 3.12.3 (main, Feb 4 2025, 14:48:35) [GCC 13.3.0] LD_LIBRARY_PATH: /usr/local/lib/python3.12/dist-packages/PyNvVideoCodec/lib:/usr/local/cuda/lib64:/usr/lib/x86_64-linux-gnu:/usr/local/lib/python3.12/dist-packages/cv2/../../lib64:/usr/local/lib/python3.12/dist-packages/torch/lib:/usr/local/lib/python3.12/dist-packages/torch_tensorrt/lib:/usr/local/cuda/compat/lib:/usr/local/nvidia/lib:/usr/local/nvidia/lib64 Traceback (most recent call last): File “”, line 198, in _run_module_as_main File “”, line 88, in _run_code File “/usr/local/lib/python3.12/dist-packages/uvicorn/_main_.py”, line 4, in uvicorn.main() File “/usr/local/lib/python3.12/dist-packages/click/core.py”, line 1161, in _call_ return self.main(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/usr/local/lib/python3.12/dist-packages/click/core.py”, line 1082, in main rv = self.invoke(ctx) ^^^^^^^^^^^^^^^^ File “/usr/local/lib/python3.12/dist-packages/click/core.py”, line 1443, in invoke return ctx.invoke(self.callback, **ctx.params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/usr/local/lib/python3.12/dist-packages/click/core.py”, line 788, in invoke return __callback(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/usr/local/lib/python3.12/dist-packages/uvicorn/main.py”, line 418, in main run( File “/usr/local/lib/python3.12/dist-packages/uvicorn/main.py”, line 587, in run server.run() File “/usr/local/lib/python3.12/dist-packages/uvicorn/server.py”, line 62, in run return asyncio.run(self.serve(sockets=sockets)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/usr/lib/python3.12/asyncio/runners.py”, line 194, in run return runner.run(main) ^^^^^^^^^^^^^^^^ File “/usr/lib/python3.12/asyncio/runners.py”, line 118, in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “uvloop/loop.pyx”, line 1518, in uvloop.loop.Loop.run_until_complete File “/usr/local/lib/python3.12/dist-packages/uvicorn/server.py”, line 69, in serve config.load() File “/usr/local/lib/python3.12/dist-packages/uvicorn/config.py”, line 458, in load self.loaded_app = import_from_string(self.app) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/usr/local/lib/python3.12/dist-packages/uvicorn/importer.py”, line 21, in import_from_string module = importlib.import_module(module_str) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “/usr/lib/python3.12/importlib/_init_.py”, line 90, in import_module return _bootstrap._gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File “<frozen importlib._bootstrap>”, line 1387, in _gcd_import File “<frozen importlib._bootstrap>”, line 1360, in _find_and_load File “<frozen importlib._bootstrap>”, line 1331, in _find_and_load_unlocked File “<frozen importlib._bootstrap>”, line 935, in _load_unlocked File “<frozen importlib._bootstrap_external>”, line 995, in exec_module File “<frozen importlib._bootstrap>”, line 488, in _call_with_frames_removed File “/app/ai-engine/matchlytics/api/app.py”, line 15, in from matchlytics.api.routes import auth, ball, benchmark, players, session, transforms, video File “/app/ai-engine/matchlytics/api/routes/benchmark.py”, line 11, in from matchlytics.api.test_decoders import benchmark_decoder, get_decoder File “/app/ai-engine/matchlytics/api/test_decoders.py”, line 8, in from matchlytics.utils.decoders import ( File “/app/ai-engine/matchlytics/utils/decoders.py”, line 14, in import PyNvVideoCodec as nvc File “/usr/local/lib/python3.12/dist-packages/PyNvVideoCodec/_init_.py”, line 156, in supportedNvEncVersion = _get_driver_version() ^^^^^^^^^^^^^^^^^^^^^ File “/usr/local/lib/python3.12/dist-packages/PyNvVideoCodec/_init_.py”, line 143, in _get_driver_version driver = DriverWrapper() ^^^^^^^^^^^^^^^ RuntimeError: Failed to load NVENC library: libnvidia-encode.so.1: cannot open shared object file: No such file or directory

Hi @joao32
we are actively working on this issue

Will downgrading the drivers, fix this on compute capablity 12.0 device**?

```**
Error code : 100
Error Type : m_api.cuvidGetDecoderCaps(&decodecaps) returned error 100
at /project/src/VideoCodecSDKUtils/helper_classes/NvCodec/NvDecoder/NvDecoder.cpp:257

Error loading video: HandleVideoSequence :
Error code : 100
Error Type : m_api.cuvidGetDecoderCaps(&decodecaps) returned error 100
at /project/src/VideoCodecSDKUtils/helper_classes/NvCodec/NvDecoder/NvDecoder.cpp:257

ERROR 2026-01-31 05:48:29.312 video.py:239] Error during loading video using PyNVVideoBackend: HandleVideoSequence :
Error code : 100
Error Type : m_api.cuvidGetDecoderCaps(&decodecaps) returned error 100
at /project/src/VideoCodecSDKUtils/helper_classes/NvCodec/NvDecoder/NvDecoder.cpp:257

Error loading video: HandleVideoSequence :
Error code : 100
Error Type : m_api.cuvidGetDecoderCaps(&decodecaps) returned error 100
at /project/src/VideoCodecSDKUtils/helper_classes/NvCodec/NvDecoder/NvDecoder.cpp:257

ERROR 2026-01-31 05:48:29.313 video.py:239] Error during loading video using PyNVVideoBackend: HandleVideoSequence :
Error code : 100
Error Type : m_api.cuvidGetDecoderCaps(&decodecaps) returned error 100
at /project/src/VideoCodecSDKUtils/helper_classes/NvCodec/NvDecoder/NvDecoder.cpp:257

Error loading video: HandleVideoSequence :
Error code : 100
Error Type : m_api.cuvidGetDecoderCaps(&decodecaps) returned error 100
at /project/src/VideoCodecSDKUtils/helper_classes/NvCodec/NvDecoder/NvDecoder.cpp:257

ERROR 2026-01-31 05:48:29.314 video.py:239] Error during loading video using PyNVVideoBackend: HandleVideoSequence :
Error code : 100
Error Type : m_api.cuvidGetDecoderCaps(&decodecaps) returned error 100
at /project/src/VideoCodecSDKUtils/helper_classes/NvCodec/NvDecoder/NvDecoder.cpp:257

Error loading video: HandleVideoSequence :
Error code : 100
Error Type : m_api.cuvidGetDecoderCaps(&decodecaps) returned error 100
at /project/src/VideoCodecSDKUtils/helper_classes/NvCodec/NvDecoder/NvDecoder.cpp:257

ERROR 2026-01-31 05:48:29.315 video.py:239] Error during loading video using PyNVVideoBackend: HandleVideoSequence :
Error code : 100
Error Type : m_api.cuvidGetDecoderCaps(&decodecaps) returned error 100
at /project/src/VideoCodecSDKUtils/helper_classes/NvCodec/NvDecoder/NvDecoder.cpp:257

Error loading video: HandleVideoSequence :
Error code : 100
Error Type : m_api.cuvidGetDecoderCaps(&decodecaps) returned error 100
at /project/src/VideoCodecSDKUtils/helper_classes/NvCodec/NvDecoder/NvDecoder.cpp:257

ERROR 2026-01-31 05:48:29.317 video.py:239] Error during loading video using PyNVVideoBackend: HandleVideoSequence :
Error code : 100
Error Type : m_api.cuvidGetDecoderCaps(&decodecaps) returned error 100
at /project/src/VideoCodecSDKUtils/helper_classes/NvCodec/NvDecoder/NvDecoder.cpp:257

Error loading video: HandleVideoSequence :
Error code : 100
Error Type : m_api.cuvidGetDecoderCaps(&decodecaps) returned error 100
at /project/src/VideoCodecSDKUtils/helper_classes/NvCodec/NvDecoder/NvDecoder.cpp:257

ERROR 2026-01-31 05:48:29.318 video.py:239] Error during loading video using PyNVVideoBackend: HandleVideoSequence :
Error code : 100
Error Type : m_api.cuvidGetDecoderCaps(&decodecaps) returned error 100
at /project/src/VideoCodecSDKUtils/helper_classes/NvCodec/NvDecoder/NvDecoder.cpp:257

Error loading video: HandleVideoSequence :
Error code : 100
Error Type : m_api.cuvidGetDecoderCaps(&decodecaps) returned error 100
at /project/src/VideoCodecSDKUtils/helper_classes/NvCodec/NvDecoder/NvDecoder.cpp:257
```

Thanks for your reply. So this is a PyNvVidoCodec issue?

Hi @ronakchhatbar
have you tried launching docker with ENV set to below
NVIDIA_DRIVER_CAPABILITIES=video,compute,utility

Yes.
ïżŒ-e NVIDIA_DRIVER_CAPABILITIES=compute,utility,video \ïżŒ

Yes. I explicitly set it on the docker run

Hi @ronakchhatbar
we will need to try reproducing this problem locally. Could you please confirm details below?

  1. Driver version
  2. OS
  3. CUDA runtime
  4. GPU
nvidia-smi
ldconfig -p | grep -E 'libnvidia-encode\.so\.1|libnvcuvid\.so\.1' || true
find /usr -name 'libnvidia-encode.so*' 2>/dev/null | head

Sat Jan 31 06:46:54 2026       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.105.08             Driver Version: 580.105.08     CUDA Version: 13.0     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA RTX PRO 4000 Blac...    Off |   00000000:01:00.0 Off |                  Off |
| 30%   36C    P8              4W /  145W |   21944MiB /  24467MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
|   1  NVIDIA RTX PRO 4000 Blac...    Off |   00000000:02:00.0 Off |                  Off |
| 30%   35C    P8              4W /  145W |   22811MiB /  24467MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A          399389      C   /opt/nim/llm/.venv/bin/python3        21638MiB |
|    0   N/A  N/A          399390      C   /opt/nim/llm/.venv/bin/python3          292MiB |
|    1   N/A  N/A          399390      C   /opt/nim/llm/.venv/bin/python3        22802MiB |
+-----------------------------------------------------------------------------------------+
        libnvidia-encode.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libnvidia-encode.so.1
        libnvcuvid.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libnvcuvid.so.1
/usr/lib/x86_64-linux-gnu/libnvidia-encode.so.580.126.09
/usr/lib/x86_64-linux-gnu/libnvidia-encode.so
/usr/lib/x86_64-linux-gnu/libnvidia-encode.so.1
░▒▓    ~ ▓▒░       



OS: Linux ubuntu-gpu 6.14.11-4-pve #1 SMP PREEMPT_DYNAMIC PMX 6.14.11-4 (2025-10-10T...
NVIDIA RTX PRO 4000 Blackwell | Driver:  580.105.08
NVIDIA RTX PRO 4000 Blackwell | Driver:  580.105.08                

Hi @ronakchhatbar ,
We tested the provided Dockerfile on our end, and it works as expected. Since the issue appears to be inconsistent, we’d like to gather more details about the failing host to better understand what’s different.

Could you please run the following diagnostics inside the container on the failing host and share the output with us?

echo “=== INSIDE CONTAINER ON FAILING HOST ===”
nvidia-smi | head -5
ldconfig -p | grep -E ‘libnvidia-encode|libnvcuvid’ || echo “VIDEO LIBS NOT FOUND IN CONTAINER”
ls -la /usr/lib/x86_64-linux-gnu/libnvidia-encode* 2>/dev/null || echo “No encode lib in /usr/lib”
ls -la /lib/x86_64-linux-gnu/libnvidia-encode* 2>/dev/null || echo “No encode lib in /lib”

This will help us understand if the video libraries are present inside the container on the failing cloud hosts.
If not, the cloud host isn’t exposing them despite the container requesting video capability.

Thanks for your efforts.
Interestingly I get this in both working and non-working hosts:
root@a1ce811cc723:/app/ai-engine/matchlytics# nvidia-smi | head -5
Thu Feb 5 09:17:52 2026
±----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.195.03 Driver Version: 570.195.03 CUDA Version: 12.8 |
|-----------------------------------------±-----------------------±---------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
root@a1ce811cc723:/app/ai-engine/matchlytics# ldconfig -p | grep -E ‘libnvidia-encode|libnvcuvid’ || echo “VIDEO LIBS NOT FOUND IN CONTAINER”
bash: libnvcuvid’: command not found
“VIDEO LIBS NOT FOUND IN CONTAINER”
root@a1ce811cc723:/app/ai-engine/matchlytics# ls -la /usr/lib/x86_64-linux-gnu/libnvidia-encode* 2>/dev/null || echo “No encode lib in /usr/lib”
lrwxrwxrwx 1 root root 21 Feb 5 09:16 /usr/lib/x86_64-linux-gnu/libnvidia-encode.so → libnvidia-encode.so.1
lrwxrwxrwx 1 root root 30 Feb 5 09:16 /usr/lib/x86_64-linux-gnu/libnvidia-encode.so.1 → libnvidia-encode.so.570.195.03
-rw-r–r-- 1 nobody nogroup 297688 Sep 20 00:38 /usr/lib/x86_64-linux-gnu/libnvidia-encode.so.570.195.03
root@a1ce811cc723:/app/ai-engine/matchlytics# ls -la /lib/x86_64-linux-gnu/libnvidia-encode* 2>/dev/null || echo “No encode lib in /lib”
lrwxrwxrwx 1 root root 21 Feb 5 09:16 /lib/x86_64-linux-gnu/libnvidia-encode.so → libnvidia-encode.so.1
lrwxrwxrwx 1 root root 30 Feb 5 09:16 /lib/x86_64-linux-gnu/libnvidia-encode.so.1 → libnvidia-encode.so.570.195.03
-rw-r–r-- 1 nobody nogroup 297688 Sep 20 00:38 /lib/x86_64-linux-gnu/libnvidia-encode.so.570.195.03

Hi @joao32 and @ronakchhatbar
There are 2 possibilities here in case of pynvvideocodec not able to dlload cuvid libraries

  1. driver did not install on host machine properly
  2. different version of cuvid libraries was installed through APT inside the container but LD_LIBRARY_PATH was pointing to older one
    as in failing case too LD_LIBRARY_PATH has /usr/lib/x86_64-linux-gnu appended to it
    is it possible to run nvidia-smi during failing case to rule out (1)

Hi @ronakchhatbar and @joao32 ,
We did some more investigation on this, it seems that in failing case highlighted below
root@a1ce811cc723:/app/ai-engine/matchlytics# ldconfig -p | grep -E ‘libnvidia-encode|libnvcuvid’ || echo “VIDEO LIBS NOT FOUND IN CONTAINER”
bash: libnvcuvid’: command not found
“VIDEO LIBS NOT FOUND IN CONTAINER”
root@a1ce811cc723:/app/ai-engine/matchlytics# ls -la /usr/lib/x86_64-linux-gnu/libnvidia-encode* 2>/dev/null || echo “No encode lib in /usr/lib”
lrwxrwxrwx 1 root root 21 Feb 5 09:16 /usr/lib/x86_64-linux-gnu/libnvidia-encode.so → libnvidia-encode.so.1
lrwxrwxrwx 1 root root 30 Feb 5 09:16 /usr/lib/x86_64-linux-gnu/libnvidia-encode.so.1 → libnvidia-encode.so.570.195.03
-rw-r–r-- 1 nobody nogroup 297688 Sep 20 00:38 /usr/lib/x86_64-linux-gnu/libnvidia-encode.so.570.195.03
**root@a1ce811cc723:/app/ai-engine/matchlytics# ls -la /lib/x86_64-linux-gnu/libnvidia-encode* 2>/dev/null || echo “No encode lib in /lib”
lrwxrwxrwx 1 root root 21 Feb 5 09:16 /lib/x86_64-linux-gnu/libnvidia-encode.so → libnvidia-encode.so.1
lrwxrwxrwx 1 root root 30 Feb 5 09:16 /lib/x86_64-linux-gnu/libnvidia-encode.so.1 → libnvidia-encode.so.570.195.03
-rw-r–r-- 1 nobody nogroup 297688 Sep 20 00:38 /lib/x86_64-linux-gnu/libnvidia-encode.so.570.195.03
**
LD_LIBRARY_PATH does not seem to be having this path **/lib/x86_64-linux-gnu/
**

Since I dont have control of the host, is there anything that I can do runtime to handle this issue?

Hi @joao32
if possible could you append below line to your dockerfile
ENV LD_LIBRARY_PATH=“/lib/x86_64-linux-gnu/:${LD_LIBRARY_PATH}”

Thanks for the answer. I added this to my Dockerfile but unfortunaly the error persists

Hi @joao32 ,
Could you also share your docker launch command?

docker run -p 8080:8080 -e NVIDIA_VISIBLE_DEVICES=all -e NVIDIA_DRIVER_CAPABILITIES=compute,utility,video -e SKIP_DECODER_VALIDATION=false --gpus all

I tested this:
ldconfig -p | grep -E ‘libnvidia-encode.so.1|libnvcuvid.so.1’ where I got:
/usr/lib/x86_64-linux-gnu/libnvidia-encode.so.1 and /usr/lib/x86_64-linux-gnu/libnvcuvid.so.1

and explicitly passed the location of the libs to:
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH

However I still get ERROR 100

Hi @joao32
We would need to investigate more on this, If possible could you please downgrade to 580 driver where this issue does not occur, also you could update to v2.1.0 which we release last week