【发布时间】:2021-12-05 17:53:31
【问题描述】:
我正在使用 Linux 上的 OpenCV 从我的视频文件中捕获视频。它工作正常,但是当我尝试播放我捕获的视频时,它播放得太快了。即我从视频中捕获 10 秒,但我在视频上播放时是 8 秒。
视频拍摄功能
def save_frames(video_file, path_in):
cap = cv2.VideoCapture(video_file)
length = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
fps = cap.get(cv2.CAP_PROP_FPS)
count = 1
while cap.isOpened():
ret, frame = cap.read()
cv2.imwrite(path_in + "frame{}.jpg".format(str(count).zfill(5)), frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
count += 1
cap.release()
cv2.destroyAllWindows()
return fps
视频作者功能
def make_video(path_out, outvid, fps=25, size=None, is_color=True,format='mp4v'):
images = [f for f in os.listdir(path_out) if ".png" in f]
from cv2 import VideoWriter, VideoWriter_fourcc, imread, resize
fourcc = VideoWriter_fourcc(*'mp4v')
vid = None
count = 0
for image in images:
if not os.path.exists(path_out + image):
raise FileNotFoundError(image)
img = imread(path_out + image)
if vid is None:
if size is None:
size = img.shape[1], img.shape[0]
vid = VideoWriter(outvid, fourcc, float(fps), size, is_color)
if size[0] != img.shape[1] and size[1] != img.shape[0]:
img = resize(img, size)
vid.write(img)
if count % 100 == 0:
print("Progress: %0.2f%%" % (count / len(images) * 100,), flush=True)
vid.release()
return
我尝试了不同的 fps (30,25,15,10,5)。这些 fps 对我不起作用,并且对于 10 秒视频上的所有 fps 600 帧捕获。cv2.CAP_PROP_FPS 默认捕获 30 fps。当我尝试更改 fps 但帧速率没有改变时。请告诉我为什么会发生这种情况。欢迎任何答案。
【问题讨论】:
-
不是
machine-learning或deep-learning问题,请不要向无关标签发送垃圾邮件(已删除)。 -
我可以看看你的主要功能吗? (你调用 save_frames() 和 make_video() 的代码)
-
我把主要乐趣加起来了……请看……cap_prop_fps函数有什么问题……我想知道如何选择帧率
-
VideoCapture 尽可能快地为您提供数据,因为 OpenCV 不是视频播放器,而是计算机视觉库。如果您需要以一定速度“播放”,则必须根据何时显示下一帧来改变 waitKey 的参数。这意味着查看挂钟时间,知道何时显示帧,并计算差异。 -- 或者使用为您处理视频演示的 GUI 工具包。
-
我改变了捕获和制作视频功能的等待键参数。但它和以前一样。请告诉在 make_video 函数中添加等待键的位置。我试过但不工作。提前致谢
标签: python opencv computer-vision