【Python cv2播放视频修改帧率】
源代码
注意看cv2.waitkey()方法,方法中的32意味着延迟32毫秒,那么就是每32毫秒播放一帧,那么一秒就是1000/32≈31帧
import cv2
from playsound import playsound
from threading import Threaddef func1():cap = cv2.VideoCapture("start.mp4")ret, frame = cap.read()while (1):#cv2.namedWindow('frame', cv2.WINDOW_NORMAL)#cv2.setWindowProperty('frame', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)ret, frame = cap.read()cv2.imshow('frame', frame)if cv2.waitKey(32) & 0xFF == ord('q') or ret == False:cap.release()cv2.destroyAllWindows()breakcv2.imshow('frame', frame)def func2():playsound('start.MP3')if __name__ == '__main__':Thread(target=func1).start()#Thread(target=func2).start()
所以为了加速视频,不妨把cv2.waitkey()中的数字修改,比如改为16,这样就是1000/16≈62帧
import cv2
from playsound import playsound
from threading import Threaddef func1():cap = cv2.VideoCapture("start.mp4")ret, frame = cap.read()while (1):#cv2.namedWindow('frame', cv2.WINDOW_NORMAL)#cv2.setWindowProperty('frame', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)ret, frame = cap.read()cv2.imshow('frame', frame)if cv2.waitKey(16) & 0xFF == ord('q') or ret == False:cap.release()cv2.destroyAllWindows()breakcv2.imshow('frame', frame)def func2():playsound('start.MP3')if __name__ == '__main__':Thread(target=func1).start()#Thread(target=func2).start()
方法解析:
cv2.imshow(‘frame’, frame)
cv2.imshow('frame', frame) 这行代码的功能是在名为 'frame' 的窗口中显示图像 frame 。
例如,如果 frame 是一帧视频图像,那么通过不断调用 cv2.imshow('frame', frame) ,就可以实现视频的逐帧显示。
在实际应用中,需要结合其他的 cv2 函数,如 cv2.waitKey 来控制显示的帧率和响应键盘事件等。比如,如果不使用 cv2.waitKey 进行适当的延迟控制,窗口可能会一闪而过或者显示异常。
cv2.waitKey(16)
cv2.waitKey(16) 函数用于在显示图像或视频时等待一段时间,并返回用户按下的键的 ASCII 值。
参数 16 表示等待的时间,单位是毫秒。也就是说,这行代码会使程序暂停 16 毫秒。
通过合理设置这个等待时间,可以控制图像或视频的显示帧率。例如,通常视频的帧率约为 25 - 30 帧每秒,对应的每帧显示时间约为 40 - 33 毫秒。这里设置为 16 毫秒,理论上可以达到约 60 帧每秒的显示效果,但实际帧率还受到计算机性能、图像处理速度等因素的影响。
如果返回值不为 -1 ,表示在等待期间用户按下了某个键,可以通过后续的判断来执行相应的操作,比如当用户按下 'q' 键时退出程序。
