GStreamer报错与警告是否会影响视频转帧输出结果?
首先直接给你结论:这些GStreamer的报错和警告完全不会损害你的输出结果,你已经成功生成的PNG帧都是正常可用的。
为什么不会影响?
看你给出的日志第一行:
[ INFO:0] VIDEOIO: Enabled backends(7, sorted by priority): FFMPEG(1000); GSTREAMER(990); V4L2(980); CV_IMAGES(970); CV_MJPEG(960); FIREWIRE(950); GPHOTO2(940)
OpenCV的视频IO模块会按照优先级从高到低尝试不同的后端来处理视频文件。FFMPEG的优先级是1000,远高于GStreamer的990。那些GStreamer的报错,是因为OpenCV在尝试用GStreamer后端打开视频时失败了(看起来是GStreamer对本地文件路径的URI解析出了问题,把Video-dataset/当成了GStreamer元素名,导致找不到对应组件),但它立刻自动 fallback 到了优先级更高的FFMPEG后端——这也是你的脚本能成功输出所有PNG帧的原因。
那些警告VideoCapture(...) was built without support of requested backendID=300也只是在告诉你:GStreamer后端(backendID=300)实际上没有被正确支持,无法用来打开视频,但这不影响其他可用的后端工作。
如何消除这些报错警告?
如果看着这些日志不舒服,可以强制指定OpenCV使用FFMPEG后端打开视频,修改你代码中的cv2.VideoCapture这一行:
cap = cv2.VideoCapture(video_path, cv2.CAP_FFMPEG)
这样OpenCV就只会尝试用FFMPEG处理视频,不会再调用GStreamer,那些报错和警告自然就消失了。
内容的提问来源于stack exchange,提问作者YellowishLight

