所以根据这个答案,似乎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是正确的,但为什么?