Python-OpenCV调用GStreamer缺失插件致运行缓慢求助
问题描述
我使用Anaconda发行版的Python 3.11.5,通过Anaconda安装了OpenCV 4.6.0和GStreamer 1.18.5。现有一段读取视频帧的代码,该代码在其他电脑上可正常运行(10秒内完成),但在我的Windows 11系统+Visual Studio Code环境中,出现GStreamer缺失必要插件的警告,且运行耗时超7分钟(最终结果正常)。
代码如下:
import cv2 import matplotlib.pyplot as plt import numpy as np video = cv2.VideoCapture(r"file_name.mov") number_of_frames = int(video.get(cv2.CAP_PROP_FRAME_COUNT)) print("Number of frames: ", str(number_of_frames)) video.set(cv2.CAP_PROP_POS_FRAMES, frame_id) ret, frame = video.read() img = np.asarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)) fig, axs = plt.subplots() axs.imshow(img, origin='lower') plt.show()
警告信息:
[ WARN:0@0.440] global C:\b\abs_f8n1j3l9l0\croot\opencv-suite_1691622637237\work\modules\videoio\src\cap_gstreamer.cpp (2386) cv::handleMessage OpenCV | GStreamer warning: your GStreamer installation is missing a required plugin [ WARN:0@0.440] global C:\b\abs_f8n1j3l9l0\croot\opencv-suite_1691622637237\work\modules\videoio\src\cap_gstreamer.cpp (2386) cv::handleMessage OpenCV | GStreamer warning: your GStreamer installation is missing a required plugin [ WARN:0@0.440] global C:\b\abs_f8n1j3l9l0\croot\opencv-suite_1691622637237\work\modules\videoio\src\cap_gstreamer.cpp (2402) cv::handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module uridecodebin0 reported: Your GStreamer installation is missing a plug-in. [ WARN:0@0.441] global C:\b\abs_f8n1j3l9l0\croot\opencv-suite_1691622637237\work\modules\videoio\src\cap_gstreamer.cpp (1356) cv::GStreamerCapture::open OpenCV | GStreamer warning: unable to start pipeline [ WARN:0@0.441] global C:\b\abs_f8n1j3l9l0\croot\opencv-suite_1691622637237\work\modules\videoio\src\cap_gstreamer.cpp (862) cv::GStreamerCapture::isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created (python.exe:7476): GLib-GIO-WARNING **: 23:01:55.543: Unexpectedly, UWP app `Microsoft.ScreenSketch_11.2307.45.0_x64__8wekyb3d8bbwe' (AUMId `Microsoft.ScreenSketch_8wekyb3d8bbwe!App') supports 29 extensions but has no verbs
解决方案
1. 强制OpenCV使用FFmpeg后端
OpenCV默认优先尝试GStreamer后端,插件缺失时会缓慢 fallback 到其他后端,直接指定FFmpeg后端可跳过等待:
# 修改初始化代码,指定CAP_FFMPEG后端 video = cv2.VideoCapture(r"file_name.mov", cv2.CAP_FFMPEG)
2. 补全GStreamer插件
若需保留GStreamer后端,通过conda安装完整插件包:
conda install -c conda-forge gstreamer-plugins-base gstreamer-plugins-good gstreamer-plugins-bad gstreamer-plugins-ugly
安装后重启VSCode和Anaconda环境生效。
3. 配置GStreamer环境变量
将Anaconda环境下GStreamer的bin目录添加到系统PATH最前端(避免版本冲突):
- 路径示例:
C:\Users\<你的用户名>\anaconda3\envs\<你的环境名>\Library\bin - 重启电脑使环境变量生效
4. 验证OpenCV后端支持
运行以下代码检查后端加载状态:
print(cv2.getBuildInformation())
在输出的Video I/O部分,确认FFmpeg和GStreamer是否显示为YES,版本是否匹配。
内容的提问来源于stack exchange,提问作者Thanabodi Worakitthamrong
相关产品推荐
相关产品推荐

