Python中使用OpenCV与playsound库实现音画同步的问题
问题描述
用户代码如下:
from playsound import playsound import cv2 image = cv2.imread("img.png") cv2.imshow("image2", image), playsound("Stan.mp3") cv2.waitKey(0) cv2.destroyAllWindows()
运行时音频播放正常,但图像窗口卡顿、无响应,需求是实现图像显示与音频播放同步运行。
问题原因
playsound是阻塞式函数——它会占用主线程直到音频播放完全结束。而OpenCV的窗口(cv2.imshow创建的)需要主线程实时处理刷新、用户交互等事件,主线程被playsound占着的时候,窗口没法得到资源更新,自然就卡顿无响应了。
解决方案
用多线程把音频播放放到子线程执行,让主线程专注处理OpenCV的窗口事件,代码修改如下:
from playsound import playsound import cv2 import threading # 定义音频播放函数 def play_audio(): playsound("Stan.mp3") image = cv2.imread("img.png") cv2.imshow("image2", image) # 启动子线程播放音频 audio_thread = threading.Thread(target=play_audio) audio_thread.start() # 主线程处理窗口事件,直到按下任意键或音频播放结束 while cv2.waitKey(1) == -1 and audio_thread.is_alive(): pass cv2.destroyAllWindows()
- 引入
threading模块创建子线程,将音频播放任务从主线程分离 - 主线程通过循环检测窗口按键事件和音频线程状态,既保证窗口正常响应,也能在音频结束或用户按键后关闭窗口
内容的提问来源于stack exchange,提问作者Microsoft surface go
相关产品推荐
相关产品推荐

