python - 为不同视频的视频帧创建新目录时出错

标签 python python-3.x opencv python-3.8

对于每个标题,我正在尝试编写代码以循环浏览文件夹中的多个视频以提取其帧,然后将每个视频的帧写入到自己的新文件夹中,例如video1到frames_video1,video2到frames_video2。
这是我的代码:

subclip_video_path = main_path + "\\subclips"
frames_path = main_path + "\\frames"

#loop through videos in file
for subclips in subclip_video_path:
    currentVid = cv2.VideoCapture(subclips)
    success, image = currentVid.read()
    count = 0
    while success:
        
        #create new frames folder for each video
        newFrameFolder = ("frames_" + subclips)
        os.makedirs(newFrameFolder)
我收到此错误:
[ERROR:0] global C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-k8sx3e60\opencv\modules\videoio\src\cap.cpp (142) cv::VideoCapture::open VIDEOIO(CV_IMAGES): raised OpenCV exception:

OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-k8sx3e60\opencv\modules\videoio\src\cap_images.cpp:253: error: (-5:Bad argument) CAP_IMAGES: can't find starting number (in the name of file): P in function 'cv::icvExtractPattern'
这是什么意思?我怎样才能解决这个问题?

最佳答案

  • 您不能循环访问字符串:for subclips in subclip_video_path:

  • 您需要获取视频列表:
    from glob import glob
    
    sub_clip_video_path = glob("sub_clip_video_path/*.mp4")
    
    这意味着获取所有.mp4扩展名视频文件并将其存储在sub_clip_video_path变量中。
    我的结果:
    ['sub_clip_video_path/output.mp4', 'sub_clip_video_path/result.mp4']
    
    由于我确定目录中包含两个.mp4扩展文件,因此我现在可以继续。
  • 您无需为每个帧重新声明VideoCapture

  • for count, sub_clips in enumerate(sub_clip_video_path):
        currentVid = cv2.VideoCapture(sub_clips)
        success, image = currentVid.read()
        count = 0
    
    声明VideoCapture后,读取当前视频的所有帧,然后为下一个视频声明VideoCapture
    for count, sub_clips in enumerate(sub_clip_video_path):
        currentVid = cv2.VideoCapture(sub_clips)
        image_counter = 0
        while currentVid.isOpened():
              .
              .
    
  • 不要使用while success这将创建一个无限循环。

  • 如果从视频中获取了第一帧,则success变量返回True。当你说:
    while success:
        #create new frames folder for each video
        newFrameFolder = ("frames_" + subclips)
        os.makedirs(newFrameFolder)
    
    您将为当前框架创建无限数量的文件夹。
    这是我的结果:
    import os
    import cv2
    from glob import glob
    
    sub_clip_video_path = glob("sub_clip_video_path/*.mp4")  # Each image extension is `.mp4`
    
    for count, sub_clips in enumerate(sub_clip_video_path):
        currentVid = cv2.VideoCapture(sub_clips)
        image_counter = 0
        while currentVid.isOpened():
            success, image = currentVid.read()
    
            if success:
                newFrameFolder = "frames_video{}".format(count + 1)
    
                if not os.path.exists(newFrameFolder):
                    os.makedirs(newFrameFolder)
                
                image_name = os.path.join(newFrameFolder, "frame{}.png".format(image_counter + 1))
                cv2.imwrite(image_name, image)
                image_counter += 1
            else:
                break
    
  • 我使用glob收集了所有视频
  • 在读取当前视频时:

  • for count, sub_clips in enumerate(sub_clip_video_path):
        currentVid = cv2.VideoCapture(sub_clips)
        image_counter = 0
    
        while currentVid.isOpened():
    

  • 如果成功捕获了当前帧,则声明文件夹名称。如果该文件夹不存在,请创建它。

  •    if success:
           newFrameFolder = "frames_video{}".format(count + 1)
    
            if not os.path.exists(newFrameFolder):
                os.makedirs(newFrameFolder)
    

  • 然后声明图像名称并保存。

  • image_name = os.path.join(newFrameFolder, "frame{}.png".format(image_counter + 1))
    cv2.imwrite(image_name, image)
    image_counter += 1
    

  • 关于python - 为不同视频的视频帧创建新目录时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64065439/

    相关文章:

    python - 默认情况下 __eq__() 方法里面有什么

    python-3.x - 图像调整大小无法在OpenCV Python中显示正确的图像

    python - Cv2 findChessboardCorners 无法找到角点

    python - 逗号在 Python 的 unpack 中是什么意思?

    python - BeautifulSoup ,get_text 但不是 <span> 文本..我怎样才能得到它?

    python - 在没有库的python中自定义crc32计算

    opencv - OpenCV 对其 RGB/BGR 颜色空间使用了哪些颜色匹配函数?

    python - Plotly:如何在不更改数据源的情况下更改 go.pie 图表的图例?

    python 检查列表中是否存在值

    python - 关闭 tkinter 窗口和消息框错误窗口