无法使用 OpenCV 在具有 cv2 的 GPU 上解码视频。CAP_FFMPEG



我正在尝试使用OpenCV获取视频列表的所有帧(大量.mp4视频(。为了加快我想的过程,我可以将FFMPEG与Nvidia视频编解码器SDK一起使用硬件加速解码(我的机器上有T4卡(。我的代码是这样的:

import os
os.environ["OPENCV_FFMPEG_CAPTURE_OPTIONS"]="video_codec;h264_cuvid"
import cv2
ret = cv2.VideoCapture("input.mp4", cv2.CAP_FFMPEG)
while True:
x, y = ret.read()
if x:
continue
break

但我在运行脚本时会出现这些错误。

[ERROR:0] global /tmp/pip-req-build-afu9cjzs/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp (1086) open Could not find decoder 'h264_cuvid'
[ERROR:0] global /tmp/pip-req-build-afu9cjzs/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp (1109) open VIDEOIO/FFMPEG: Failed to initialize VideoCapture

我的ffmpeg配置,ffmpeg:

ffmpeg version N-102965-gf531a1a4e8 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 9 (Ubuntu 9.3.0-17ubuntu1~20.04)
configuration: --enable-nonfree --enable-cuda --enable-cuvid --enable-nvdec --enable-cuda-nvcc --enable-nvenc --enable-libnpp --enable-shared --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64
libavutil      57.  0.100 / 57.  0.100
libavcodec     59.  3.101 / 59.  3.101
libavformat    59.  4.100 / 59.  4.100
libavdevice    59.  0.100 / 59.  0.100
libavfilter     8.  0.103 /  8.  0.103
libswscale      6.  0.100 /  6.  0.100
libswresample   4.  0.100 /  4.  0.100
Hyper fast Audio and Video encoder

ffmpeg -hwaccels:

ffmpeg version N-102965-gf531a1a4e8 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 9 (Ubuntu 9.3.0-17ubuntu1~20.04)
configuration: --enable-nonfree --enable-cuda --enable-cuvid --enable-nvdec --enable-cuda-nvcc --enable-nvenc --enable-libnpp --enable-shared --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64
libavutil      57.  0.100 / 57.  0.100
libavcodec     59.  3.101 / 59.  3.101
libavformat    59.  4.100 / 59.  4.100
libavdevice    59.  0.100 / 59.  0.100
libavfilter     8.  0.103 /  8.  0.103
libswscale      6.  0.100 /  6.  0.100
libswresample   4.  0.100 /  4.  0.100
Hardware acceleration methods:
cuda

OpenCV版本opencv-python==4.5.3.56

在我的设置中,我必须构建ffmpeg以启用cuvid支持。

您可以检查您的ffmpeg是否支持cuvid:

# type this in terminal:
ffmpeg -decoders 2>/dev/null | grep h264_cuvid
# returns:
V..... h264_cuvid           Nvidia CUVID H264 decoder (codec h264)

您的系统中还需要一些nvidia-lib:

# type this in terminal:
ldconfig -p 2>/dev/null | grep cuvid
# You should see something similar to below:
libnvcuvid.so.1 (libc6,x86-64) => /usr/lib/libnvcuvid.so.1
libnvcuvid.so (libc6,x86-64) => /usr/lib/libnvcuvid.so

最新更新