opencv写视频而无需手动计时帧

时间:2015-12-03 21:20:37

标签: opencv video

所以根据这个答案,似乎opencv VideoWriter并不是非常聪明(或者很好,可能不适合我想用它的目的)处理帧。根据这个问题的answer,您必须手动计算帧数,因此创建两小时的视频需要两个小时。

如果要检查,下面的脚本会创建一个100 fps的VideoWriter,并向其写入1500帧,这应该是15秒长,但最终是26秒左右。

编辑:编辑代码以创建六个视频,其中3个fps-s的长度为15秒和30秒。问题末尾的表格是用这个来完成的。

import numpy as np
import cv2

for fps in [20,50,100]:
    vWriter = cv2.VideoWriter("test" +str(fps)+".avi", cv2.VideoWriter_fourcc('P','I','M','1'),fps,(500,500),True)
    y = 0
    for x in range(15*fps):
        img = np.zeros((500,500,3)).astype(np.uint8)
        cv2.circle(img,(250,int(y)),5,(255,255,255),-1,cv2.LINE_AA)
        y += 500/15/fps
        vWriter.write(img)



for fps in [20,50,100]:
    vWriter = cv2.VideoWriter("test2_" +str(fps)+".avi", cv2.VideoWriter_fourcc('P','I','M','1'),fps,(500,500),True)
    y = 0
    ts = time.time()
    for x in range(30*fps):
        img = np.zeros((500,500,3)).astype(np.uint8)
        cv2.circle(img,(250,int(y)),5,(255,255,255),-1,cv2.LINE_AA)
        y += 500/30/fps
        vWriter.write(img)

这有什么解决方法吗?帧的手动定时似乎非常麻烦。或者,如果没有变通方法,您可以推荐的任何其他跨平台视频创建方法都没有遇到此问题?

我做了一个不同长度和帧速率的小测试,我检查了20,50和100 fps,15和30秒长视频(预期长度,所以我生成了fps帧的15或30倍)。

FPS   intended_length   actual_length

20    15                12
50    15                15
100   15                25
20    30                25
50    30                30
100   30                50

看起来50 fps是正确的,但为什么?

0 个答案:

没有答案