源代码
注意看cv2.waitkey()方法,方法中的32意味着延迟32毫秒,那么就是每32毫秒播放一帧,那么一秒就是1000/32≈31帧
import cv2
from playsound import playsound
from threading import Thread
def 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()
break
cv2.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 Thread
def 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()
break
cv2.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'
键时退出程序。