效果如下:
虽然视频比较抽象,但是确实是用python(cv2)实现的
代码:
import cv2
from playsound import playsound
from threading import Thread
def func1():
cap = cv2.VideoCapture("mp4/out.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(33) & 0xFF == ord('q') or ret == False:
cap.release()
cv2.destroyAllWindows()
break
cv2.imshow('frame', frame)
def func2():
playsound('mp4/startmusic.MP3') #替换为音频路径
if __name__ == '__main__':
Thread(target=func1).start()
Thread(target=func2).start()
这段 Python 代码的功能和原理如下:
功能:
- 同时播放一个视频和一段音频。
- 视频在全屏窗口中显示,并且可以通过按下
q
键或视频读取结束来关闭视频窗口。
原理:
- 导入了必要的库:
cv2
用于视频处理,playsound
用于播放音频,threading
用于多线程操作。 - 定义了两个函数
func1
和func2
。func1
函数:- 使用
cv2.VideoCapture
打开指定的视频文件。 - 通过一个循环不断读取视频帧,并使用
cv2.imshow
在命名为frame
的窗口中显示。 - 设置窗口为全屏显示。
- 当按下
q
键或者视频读取结束(ret == False
)时,释放视频资源并关闭窗口。
- 使用
func2
函数:使用playsound
播放指定的音频文件。
- 在
if __name__ == '__main__':
条件下,创建两个线程分别执行func1
和func2
函数,实现视频播放和音频播放的同时进行。
这样通过多线程,可以在播放音频的同时独立地处理视频的显示和控制,提高程序的并发性能,使得音频和视频的播放能够相对独立和流畅地进行。
全屏播放的核心:
cv2.namedWindow('frame',cv2.WINDOW_NORMAL)
cv2.setWindowProperty('frame',cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)
cv2.namedWindow('frame', cv2.WINDOW_NORMAL)
这行代码创建了一个名为 frame
的窗口,并将其设置为可调整大小的模式(cv2.WINDOW_NORMAL
)。
cv2.setWindowProperty('frame', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
这行代码则是将名为 frame
的窗口的属性设置为全屏显示(cv2.WINDOW_FULLSCREEN
)。
通过这两步操作,首先创建了一个可调整的窗口,然后将其属性明确设置为全屏,从而实现了全屏播放的效果。
例如,如果只创建了普通的窗口而不进行属性设置,那么窗口可能会以默认的大小和样式显示,而不是全屏。再比如,如果直接尝试将一个不可调整大小的窗口设置为全屏,可能会导致设置无效或出现异常。