对于每个标题,我正在尝试编写代码以循环浏览文件夹中的多个视频以提取其帧,然后将每个视频的帧写入到自己的新文件夹中,例如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/