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

Ubuntu16.04下Python+OpenCV3.1转视频报GStreamer URI断言错误求助

解决OpenCV 3.1 + GStreamer处理特定视频时的URI断言错误

看起来你遇到的问题是GStreamer后端对文件路径的URI解析出了问题——虽然你确认了路径正确,但OpenCV在调用GStreamer时,对本地路径的格式要求比普通文件路径要严格一些。下面是几个针对性的解决办法:

1. 转换为GStreamer兼容的URI格式

GStreamer需要标准的URI格式识别文件,而非普通本地路径字符串。你可以把输出路径改成file:///开头的绝对路径格式,比如:

# 示例:替换成你的实际绝对路径
output_uri = "file:///home/yourname/videos/v_HandStandPushups_g01_c01.avi"
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter(output_uri, fourcc, 25.0, (320, 240), True)

注意:file:///后面要跟完整的绝对路径,三个斜杠是必须的,不要漏掉。

2. 强制切换到FFmpeg后端(推荐)

Ubuntu 16.04上的GStreamer版本和OpenCV 3.1可能存在兼容问题,而FFmpeg对XVID编码器的支持更稳定。你可以在创建VideoWriter时明确指定使用FFmpeg后端:

fourcc = cv2.VideoWriter_fourcc(*'XVID')
# 第二个参数指定FFmpeg后端
out = cv2.VideoWriter(output_path, cv2.CAP_FFMPEG, fourcc, 25.0, (320, 240), True)

如果这样还不行,可以在运行脚本前设置环境变量,强制OpenCV优先使用FFmpeg:

export OPENCV_VIDEOIO_PRIORITY_GSTREAMER=0
python your_script.py

3. 检查路径和文件名的特殊字符

GStreamer的URI解析对特殊字符(比如空格、非ASCII字符)比较敏感,可以尝试:

  • 把文件移动到路径更简单的目录(比如/tmp下),用纯英文、无空格的文件名测试
  • 如果路径里有空格,要在URI里转义成%20,比如file:///home/yourname/my%20videos/test.avi

4. 确认视频尺寸参数正确

你的图像尺寸是(240, 320, 3),也就是高度240,宽度320,但VideoWriter要求的尺寸参数是(宽度, 高度),也就是(320, 240)。如果这里写反了,也可能触发奇怪的后端错误,务必核对这个参数。

5. 验证OpenCV的GStreamer支持

可以运行以下代码查看OpenCV的编译配置,确认是否真的启用了GStreamer:

print(cv2.getBuildInformation())

如果GStreamer相关选项是NO,那之前的报错可能是OpenCV自动 fallback 到GStreamer时的异常,这时候强制用FFmpeg后端就可以解决问题。


内容的提问来源于stack exchange,提问作者Pedro Abreu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:21:16