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
相关产品推荐
相关产品推荐

