关于在python中调整非定帧摄像头的帧率问题
买了一个可调节帧率的工业摄像头,摄像头在商家给定的软件中可自由改变帧率进行视频保存,但是在python中拍摄视频时却默认以最低帧率拍摄,使用OpenCV中自带的设置帧率的方法将摄像头调整为60fps后,但最终拍摄出来的视频还是以30fps的摄像头拍摄,此时若以60fps的帧率保存的话,就会导致出现录制的视频出现自动加速的现象。经过调试,最终找到了一个方法可以将摄像头录制帧率提高到和保存帧率相同,代码如下所示:
def recording():
cap = cv2.VideoCapture(0)
# width和height必须和摄像头逐帧捕获的分辨率一致,否则会生成1kb视频文件并且无法播放
# 通过frame.shape获取摄像头逐帧分辨率
width = 1280 # 定义摄像头获取图像宽度
height = 720 # 定义摄像头获取图像长度
fps = 60
cap.set(6, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')) # 视频流格式
cap.set(5, fps) # 帧率
cap.set(cv2.CAP_PROP_FRAME_WIDTH, width) # 设置宽度
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height) # 设置长度
FILENAME = '/home/wcc/Desktop/1.avi'
out = cv2.VideoWriter(FILENAME,cv2.VideoWriter_fourcc('M','J','P','G'), fps=fps, frameSize=(width, height))
print(cap.get(cv2.CAP_PROP_FPS))
while True:
# 逐帧捕获
ret, frame = cap.read()
if not ret:
return
# 线程结束条件,人工干预
out.write(frame)
cv2.imshow('frame', frame)
if cv2.waitKey(1) == ord('q'):
break
由于当初使用的是以MP4格式保存的,使用的是
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
这种视频流格式。
经过观察商家提供的软件的保存格式,发现软件中保存的视频的格式为avi格式,因此,只需要将视频流格式更改为
cv2.VideoWriter_fourcc('M','J','P','G')
这种格式,并将视频保存为avi格式即可,然后帧率即可正常更改,保存的视频的帧率会和拍摄的视频帧率保持一致。
需要注意的是:摄像头帧率和摄像头分辨率有关,一般摄像头都是分辨率越低,帧率越高,具体对应关系要看摄像头说明书。以我的摄像头为例,假设设置的摄像头的分辨率格式为:1080P,设置的帧率格式为60fps,拍摄和保存的视频都是正常的1080P和60fps。现在我把摄像头分辨率调整为640*480,设置的保存帧率和摄像头帧率格式都为60fps,此时再运行代码时,发现此时摄像头的拍摄帧率自动变为了120fps,但是保存的帧率还是60fps,录制出来的视频速度不变,时间延长。