You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 12:05:37