每秒提取文件夹中所有视频的帧
Extracting frames every second of all videos in folder
我试图在视频的每一秒提取一帧,同时在一个文件夹中有多个视频。我让它适用于 1 个这样的视频,但我认为我搞乱了所有视频的循环。以下是 1 个有效视频的代码。
import cv2
pathOut = r"C:/Users/Me/Out/"
vidcap = cv2.VideoCapture(r'C:\Me\Desktop\test.mp4');
count = 0
success = True
while success:
success,image = vidcap.read()
print('read a new frame:',success)
if count%30 == 0 :
cv2.imwrite(pathOut + 'frame%d.jpg'%count,image)
count+=1
所有视频的循环都是我这样编的。
import os
import cv2
pathOut = r"C:/Users/Me/Out/"
count = 0
success = True
counter = 1
listing = os.listdir(r'C:/Users/Me/videos/train')
for vid in listing:
vid = r"C:/Users/Me/videos/train/"+vid
cap = cv2.VideoCapture(vid)
count = 0
counter += 1
while success:
success,image = cap.read()
print('read a new frame:',success)
if count%30 == 0 :
cv2.imwrite(pathOut + 'frame%d.jpg'%count,image)
count+=1
我的视频循环似乎不起作用,因为它只拍摄一个视频。然后它显示为 false,可能是因为没有剩余帧,但我不知道如何将其推进到下一个视频。我想我需要做一些小的调整,有人知道具体是什么吗?
这似乎是一个很小的逻辑错误:一旦第一个视频将成功设置为假,它就再也不会设置为真,所有视频的所有后续 while 循环都将被跳过。尝试将程序更改为:
import os
import cv2
pathOut = r"C:/Users/Me/Out/"
count = 0
counter = 1
listing = os.listdir(r'C:/Users/Me/videos/train')
for vid in listing:
vid = r"C:/Users/Me/videos/train/"+vid
cap = cv2.VideoCapture(vid)
count = 0
counter += 1
success = True
while success:
success,image = cap.read()
print('read a new frame:',success)
if count%30 == 0 :
cv2.imwrite(pathOut + 'frame%d.jpg'%count,image)
count+=1
只要在指定的目录中只有视频类型文件而不是任何其他类型,这应该可以工作(注意:select 具有特定扩展名的文件没有正则表达式。)
附加说明:没有足够的声誉来添加评论,因此将其添加为答案。
vid = r"C:/Users/Me/videos/train/"+vid
需要什么?
您是要附加文件名和目录名吗?如果是,请尝试 os.path.join
我试图在视频的每一秒提取一帧,同时在一个文件夹中有多个视频。我让它适用于 1 个这样的视频,但我认为我搞乱了所有视频的循环。以下是 1 个有效视频的代码。
import cv2
pathOut = r"C:/Users/Me/Out/"
vidcap = cv2.VideoCapture(r'C:\Me\Desktop\test.mp4');
count = 0
success = True
while success:
success,image = vidcap.read()
print('read a new frame:',success)
if count%30 == 0 :
cv2.imwrite(pathOut + 'frame%d.jpg'%count,image)
count+=1
所有视频的循环都是我这样编的。
import os
import cv2
pathOut = r"C:/Users/Me/Out/"
count = 0
success = True
counter = 1
listing = os.listdir(r'C:/Users/Me/videos/train')
for vid in listing:
vid = r"C:/Users/Me/videos/train/"+vid
cap = cv2.VideoCapture(vid)
count = 0
counter += 1
while success:
success,image = cap.read()
print('read a new frame:',success)
if count%30 == 0 :
cv2.imwrite(pathOut + 'frame%d.jpg'%count,image)
count+=1
我的视频循环似乎不起作用,因为它只拍摄一个视频。然后它显示为 false,可能是因为没有剩余帧,但我不知道如何将其推进到下一个视频。我想我需要做一些小的调整,有人知道具体是什么吗?
这似乎是一个很小的逻辑错误:一旦第一个视频将成功设置为假,它就再也不会设置为真,所有视频的所有后续 while 循环都将被跳过。尝试将程序更改为:
import os
import cv2
pathOut = r"C:/Users/Me/Out/"
count = 0
counter = 1
listing = os.listdir(r'C:/Users/Me/videos/train')
for vid in listing:
vid = r"C:/Users/Me/videos/train/"+vid
cap = cv2.VideoCapture(vid)
count = 0
counter += 1
success = True
while success:
success,image = cap.read()
print('read a new frame:',success)
if count%30 == 0 :
cv2.imwrite(pathOut + 'frame%d.jpg'%count,image)
count+=1
只要在指定的目录中只有视频类型文件而不是任何其他类型,这应该可以工作(注意:select 具有特定扩展名的文件没有正则表达式。)
附加说明:没有足够的声誉来添加评论,因此将其添加为答案。
vid = r"C:/Users/Me/videos/train/"+vid
需要什么?
您是要附加文件名和目录名吗?如果是,请尝试 os.path.join