使用OpenCV结合H264编码生成视频时,提示无法加载libcuda.so.1
解决OpenCV-Python H.264编码时libcuda.so.1加载失败的问题
你的错误提示:
[h264_nvenc @ 0x562490d62d80] Cannot load libcuda.so.1
Could not open codec 'h264_nvenc': Unspecified error
本质是因为你代码里指定的fourcc = cv2.VideoWriter_fourcc(*'H264'),在OpenCV中默认会调用NVIDIA的NVENC硬件编码器,而这个编码器依赖NVIDIA的CUDA驱动库,你的系统要么没装CUDA驱动,要么库路径配置有问题。下面是几种针对性的解决方案:
方案一:安装并配置NVIDIA CUDA驱动
- 先确认你的机器有NVIDIA独立显卡,运行命令
nvidia-smi,如果没有输出或提示命令不存在,说明需要安装对应显卡型号的CUDA驱动(注意是驱动,不是CUDA Toolkit开发包)。 - 安装完成后,检查
libcuda.so.1是否存在于系统库路径中(比如/usr/lib/x86_64-linux-gnu/或/usr/local/cuda/lib64/)。如果找不到,找到实际的CUDA驱动库文件(比如libcuda.so.535.104.05,版本号依你安装的驱动而定),创建软链接:sudo ln -s /usr/lib/x86_64-linux-gnu/libcuda.so.535.104.05 /usr/lib/x86_64-linux-gnu/libcuda.so.1 - 重启终端后再运行你的代码,就能正常调用NVENC编码器了。
- 先确认你的机器有NVIDIA独立显卡,运行命令
方案二:改用软件H.264编码器(无需NVIDIA显卡)
如果你的机器没有NVIDIA显卡,或者不想折腾CUDA驱动,可以换用OpenCV支持的软件H.264编码器,常用的有两种:- 使用
avc1编码器(基于FFmpeg的软件实现),修改代码中的fourcc部分:import cv2 width = 1920 # 替换成你的实际宽度 height = 1080 # 替换成你的实际高度 name = "output.mp4" # 改用软件H.264编码器 fourcc = cv2.VideoWriter_fourcc(*'avc1') video = cv2.VideoWriter(name, fourcc, 30, (width, height)) # 后续写入帧的逻辑... video.release() - 或者使用
X264编码器(开源的H.264软件编码库),对应的fourcc是cv2.VideoWriter_fourcc(*'X264'),pip安装的官方OpenCV包一般已经包含X264支持。
- 使用
方案三:确认OpenCV的编码器支持情况
你可以运行以下代码查看OpenCV编译时支持的所有编码器,确认你想用的编码器是否存在:import cv2 print(cv2.getBuildInformation())在输出中查找
Video I/O部分,查看是否有FFmpeg、X264相关的支持项,这能帮你判断哪种编码器可用。
内容的提问来源于stack exchange,提问作者svecax
相关产品推荐
相关产品推荐

