我想使用 python opencv 模块以特定时间间隔保存视频帧
I want to save the frames of video at certain time intervals using python opencv module
我想使用 python opencv 模块以特定时间间隔保存视频帧。
我要把视频文件分成40张图片。
但是我没有想到算法。
我的想法是:
- 输入视频文件。
- 计算视频中的帧数和 fps。
- Returns帧间距。 (长度 / 40)
- 运行 而
帧数、fps、跳转间隔的统计方式:
length = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
fps = cap.get(cv2.CAP_PROP_FPS)
计算帧数、fps和跳转后(例子):
D:\UCF-101\ApplyEyeMakeup\v_ApplyEyeMakeup_g01_c01.avi's FPS : 25.0
D:\UCF-101\ApplyEyeMakeup\v_ApplyEyeMakeup_g01_c01.avi's Length : 164
D:\UCF-101\ApplyEyeMakeup\v_ApplyEyeMakeup_g01_c01.avi's Running time : 6.56
D:\UCF-101\ApplyEyeMakeup\v_ApplyEyeMakeup_g01_c01.avi's jump : 4 ( 4.1 )
这里是 while 循环:
while count < length and save < 40:
print("Count : ", count)
success, frame = cap.read()
cv2.imshow('Window', frame)
if count % jump == 0:
cv2.imwrite(save_path + LabelList[LabelNumber] + "\" + FileList[FileNumber] + "_" + str(count) + ".jpg", frame)
save = save + 1
print("Saved! : ", save)
cv2.waitKey(1)
count = count + 1
我遇到了两个问题:
- 总长度小于30帧的视频
- 没有3.25帧(只有3帧,不是浮点数)
不管怎样,如果你对我的问题感兴趣,我会详细教你。
我不知道该说什么。
重要的是我想定期保存40张图片,不管图片长短。
兄弟请帮帮我...
There is not frame like 3.25 frame(there is just 3 frame, not float number)
如果您将 jump
设置为浮动,则只需将您的条件更改为 count % jump < 1
。帧之间的间距会不均匀,但每种情况下最终应该有 40 帧。
A video with a total length of less than 30 frames.
如果帧数 <= 40,只需将 jump
设置为 1,您将获得所有可用帧。
cap = cv2.VideoCapture(vidoname)
time_skips = float(2000) #skip every 2 seconds. You need to modify this
count = 0
success,image = cap.read()
while success:
cv2.imwrite("frame%d.jpg" % count, image)
cap.set(cv2.CAP_PROP_POS_MSEC,(count*time_skips)) # move the time
success,image = cap.read()
count += 1
# release after reading
cap.release()
如果您想获取特定间隔的帧
import cv2
cap = cv2.VideoCapture("E:\VID-20190124-WA0016.mp4")
count = 0
while cap.isOpened():
ret, frame = cap.read()
if ret:
cv2.imwrite('D:\out2\frame{:d}.jpg'.format(count), frame)
count += 30 # i.e. at 30 fps, this advances one second
cap.set(1, count)
else:
cap.release()
break
我想使用 python opencv 模块以特定时间间隔保存视频帧。
我要把视频文件分成40张图片。 但是我没有想到算法。
我的想法是:
- 输入视频文件。
- 计算视频中的帧数和 fps。
- Returns帧间距。 (长度 / 40)
- 运行 而
帧数、fps、跳转间隔的统计方式:
length = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
fps = cap.get(cv2.CAP_PROP_FPS)
计算帧数、fps和跳转后(例子):
D:\UCF-101\ApplyEyeMakeup\v_ApplyEyeMakeup_g01_c01.avi's FPS : 25.0
D:\UCF-101\ApplyEyeMakeup\v_ApplyEyeMakeup_g01_c01.avi's Length : 164
D:\UCF-101\ApplyEyeMakeup\v_ApplyEyeMakeup_g01_c01.avi's Running time : 6.56
D:\UCF-101\ApplyEyeMakeup\v_ApplyEyeMakeup_g01_c01.avi's jump : 4 ( 4.1 )
这里是 while 循环:
while count < length and save < 40:
print("Count : ", count)
success, frame = cap.read()
cv2.imshow('Window', frame)
if count % jump == 0:
cv2.imwrite(save_path + LabelList[LabelNumber] + "\" + FileList[FileNumber] + "_" + str(count) + ".jpg", frame)
save = save + 1
print("Saved! : ", save)
cv2.waitKey(1)
count = count + 1
我遇到了两个问题:
- 总长度小于30帧的视频
- 没有3.25帧(只有3帧,不是浮点数)
不管怎样,如果你对我的问题感兴趣,我会详细教你。 我不知道该说什么。
重要的是我想定期保存40张图片,不管图片长短。
兄弟请帮帮我...
There is not frame like 3.25 frame(there is just 3 frame, not float number)
如果您将 jump
设置为浮动,则只需将您的条件更改为 count % jump < 1
。帧之间的间距会不均匀,但每种情况下最终应该有 40 帧。
A video with a total length of less than 30 frames.
如果帧数 <= 40,只需将 jump
设置为 1,您将获得所有可用帧。
cap = cv2.VideoCapture(vidoname)
time_skips = float(2000) #skip every 2 seconds. You need to modify this
count = 0
success,image = cap.read()
while success:
cv2.imwrite("frame%d.jpg" % count, image)
cap.set(cv2.CAP_PROP_POS_MSEC,(count*time_skips)) # move the time
success,image = cap.read()
count += 1
# release after reading
cap.release()
如果您想获取特定间隔的帧
import cv2
cap = cv2.VideoCapture("E:\VID-20190124-WA0016.mp4")
count = 0
while cap.isOpened():
ret, frame = cap.read()
if ret:
cv2.imwrite('D:\out2\frame{:d}.jpg'.format(count), frame)
count += 30 # i.e. at 30 fps, this advances one second
cap.set(1, count)
else:
cap.release()
break