我正在尝试使用VideoCapture将视频转换为帧。在目录“ startpath”中,我有多个.mp4文件。我想运行一个for循环,使用该循环,所有这些文件都将转换为.png帧,并将存储在每个视频的单独文件夹中。
但是我不确定如何使用for循环将其用于多个文件。
如果只有1个文件,我就能使代码正常工作。下面是代码-:
import cv2
import os, fnmatch
startpath='C:/Users/work/Documents/data'
listOfFiles = os.listdir(startpath)
print(listOfFiles)
pattern = "*.mp4"
names = []
for entry in listOfFiles:
if fnmatch.fnmatch(entry, pattern):
names.append(entry)
print (names) #this list has all the .mp4 files
vidcap=cv2.VideoCapture(C:/Users/work/Downloads/SampleVideo_1280x720_30mb.mp4)
success,image = vidcap.read()
count = 0
hello = os.path.join(startpath, 'output')
output = os.mkdir(hello)
os.chdir(hello)
while success:
cv2.imwrite("frame%d.jpg" % count, image)
# save frame as JPEG file
success,image = vidcap.read()
print('Read a new frame: ', success)
count += 1
在此方面的任何帮助将不胜感激。
谢谢
答案 0 :(得分:0)
尝试这段代码。我还没有运行它。但这应该给您解决问题的思路。
import cv2
import os, fnmatch
startpath='C:/Users/work/Documents/data'
listOfFiles = os.listdir(startpath)
print(listOfFiles)
pattern = "*.mp4"
names = []
for entry in listOfFiles:
if fnmatch.fnmatch(entry, pattern):
names.append(entry)
print (names) #this list has all the .mp4 files
for eachnames in names:
vidcap=cv2.VideoCapture('C:/Users/work/Documents/data'+ eachnames)
success,image = vidcap.read()
count = 0
hello = os.path.join(startpath, eachnames.split('.')[0])
output = os.mkdir(hello)
# os.chdir(hello)
count=0
while success:
cv2.imwrite("frame%d.jpg" % count, hello+'/'+image)
# save frame as JPEG file
success,image = vidcap.read()
print('Read a new frame: ', success)
count += 1
我刚刚添加了一个循环来遍历所有文件名,并使用该名创建一个文件夹。此名称也用于在保存时保存。