关于在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,录制出来的视频速度不变,时间延长。