使用 cv2 提取 python 中的视频帧
Extract video frames in python using cv2
我想将我的视频分成几帧。
我正在使用以下代码:
import cv2
import numpy as np
import os
# Playing video from file:
cap = cv2.VideoCapture('myvideo.mp4')
cap.set(cv2.CAP_PROP_FPS, 5)
try:
if not os.path.exists('data'):
os.makedirs('data')
except OSError:
print ('Error: Creating directory of data')
currentFrame = 0
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
# Saves image of the current frame in jpg file
name = './data/frame' + str(currentFrame) + '.jpg'
print ('Creating...' + name)
cv2.imwrite(name, frame)
# To stop duplicate images
currentFrame += 1
if not ret: break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
我已将 FPS 设置为 5,'myvideo.mp4' 为 0:55 秒。所以,我希望有 55*5 = 275 帧,但上面的代码给了我更多的帧,而且它不会停止生成帧。代码有问题吗?
如果你想要合适的帧率,你可以做到
framerate = vid.get(5)
而不是
cap.set(cv2.CAP_PROP_FPS, 5)
这将为您提供准确的帧率
我想将我的视频分成几帧。
我正在使用以下代码:
import cv2
import numpy as np
import os
# Playing video from file:
cap = cv2.VideoCapture('myvideo.mp4')
cap.set(cv2.CAP_PROP_FPS, 5)
try:
if not os.path.exists('data'):
os.makedirs('data')
except OSError:
print ('Error: Creating directory of data')
currentFrame = 0
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
# Saves image of the current frame in jpg file
name = './data/frame' + str(currentFrame) + '.jpg'
print ('Creating...' + name)
cv2.imwrite(name, frame)
# To stop duplicate images
currentFrame += 1
if not ret: break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
我已将 FPS 设置为 5,'myvideo.mp4' 为 0:55 秒。所以,我希望有 55*5 = 275 帧,但上面的代码给了我更多的帧,而且它不会停止生成帧。代码有问题吗?
如果你想要合适的帧率,你可以做到
framerate = vid.get(5)
而不是
cap.set(cv2.CAP_PROP_FPS, 5)
这将为您提供准确的帧率