首页 > 解决方案 > GStreamer 的错误和警告是否会破坏我的输出?

问题描述

我正在使用 Python3 脚本将视频剪辑(.mp4)分割成帧(.png 图像)。为此,我使用 opencv (cv2) 方法。

import cv2
import os

dataset_folder = 'Video-dataset/'
save_path = 'Video-dataset-images/'

if not os.path.exists(save_path):
    os.mkdir(save_path)

videos_list = os.listdir(dataset_folder)
video_ids = [re.findall("[0-9_]*", video)[0] for video in videos]

for video in video_ids:
    video_path = dataset_folder + video + ".mp4"
    save_name = save_path + video
    cap = cv2.VideoCapture(video_path)
    fps = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    fps_count = 0
    for i in range(fps):
        ret, frame = cap.read()
        if ret:
            cv2.imwrite(save_name+str(10000+fps_count)+'.png', frame)
            fps_count += 1

我将实际的视频剪辑分割成图像,但是我还从脚本中得到以下回声:

[信息:0]视频:启用后端(7,按优先级排序):FFMPEG(1000);GSTREAMER(990);V4L2(980);CV_IMAGES(970); CV_MJPEG(960); 火线(950);GPHOTO2(940)

(python3.6:12757):GStreamer-CRITICAL **:13:40:56.545:gst_element_make_from_uri:断言'gst_uri_is_valid(uri)'失败GStreamer:错误打开bin:没有元素“视频数据集”

(python3.6:12757): GStreamer-CRITICAL **: 13:40:56.545: gst_element_get_state: assertion 'GST_IS_ELEMENT (element)' failed [WARN:0] VideoCapture(filename=Video-dataset/01.mp4) 没有构建支持请求的 backendID=300

(python3.6:12757):GStreamer-CRITICAL **:13:41:18.943:gst_element_make_from_uri:断言'gst_uri_is_valid(uri)'失败GStreamer:错误打开bin:没有元素“视频数据集”

(python3.6:12757): GStreamer-CRITICAL **: 13:41:18.943: gst_element_get_state: assertion 'GST_IS_ELEMENT (element)' failed [WARN:0] VideoCapture(filename=Video-dataset/03.mp4) 没有构建支持请求的 backendID=300

(python3.6:12757):GStreamer-CRITICAL **:13:41:19.331:gst_element_make_from_uri:断言'gst_uri_is_valid(uri)'失败GStreamer:错误打开bin:没有元素“视频数据集”

(python3.6:12757): GStreamer-CRITICAL **: 13:41:19.331: gst_element_get_state: assertion 'GST_IS_ELEMENT (element)' failed [WARN:0] VideoCapture(filename=Video-dataset/10.mp4) 没有构建支持请求的 backendID=300

(python3.6:12757):GStreamer-CRITICAL **:13:41:25.879:gst_element_make_from_uri:断言'gst_uri_is_valid(uri)'失败GStreamer:错误打开bin:没有元素“视频数据集”

(python3.6:12757): GStreamer-CRITICAL **: 13:41:25.879: gst_element_get_state: assertion 'GST_IS_ELEMENT (element)' failed [WARN:0] VideoCapture(filename=Video-dataset/15.mp4) 没有构建支持请求的 backendID=300

(python3.6:12757):GStreamer-CRITICAL **:13:41:31.485:gst_element_make_from_uri:断言'gst_uri_is_valid(uri)'失败GStreamer:打开bin时出错:没有元素“视频数据集”

(python3.6:12757): GStreamer-CRITICAL **: 13:41:31.485: gst_element_get_state: assertion 'GST_IS_ELEMENT (element)' failed [WARN:0] VideoCapture(filename=Video-dataset/27.mp4) 没有构建支持请求的 backendID=300

(python3.6:12757):GStreamer-CRITICAL **:13:41:38.932:gst_element_make_from_uri:断言'gst_uri_is_valid(uri)'失败GStreamer:错误打开bin:没有元素“视频数据集”

(python3.6:12757): GStreamer-CRITICAL **: 13:41:38.932: gst_element_get_state: assertion 'GST_IS_ELEMENT (element)' failed [WARN:0] VideoCapture(filename=Video-dataset/34.mp4) 没有构建支持请求的 backendID=300

标签: pythonvideogstreamercv2

解决方案


我终于明白了问题所在,这行代码是错误的,因为少数视频有字母数字名称。

video_ids = [re.findall("[0-9_]*", video)[0] for video in videos]

此外,这些相同的视频是我在循环中排除的 .avi 扩展名。


推荐阅读