You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pygame显示MoviePy视频预览时无法通过鼠标点击中断的问题

解决MoviePy预览时无法响应Pygame鼠标点击的问题

问题根源

你的代码里vid.preview()是阻塞式函数,调用后会持续占用线程播放视频,后面的pygame.display.update()和事件循环代码根本没有执行的机会,自然检测不到鼠标点击事件。

修复方案

放弃用vid.preview(),改为手动逐帧将视频渲染到Pygame窗口,这样就能在每帧播放间隙处理Pygame事件。修改后的代码示例:

def introscreen():
    # 确保已初始化Pygame窗口,尺寸和视频分辨率匹配
    screen = pygame.display.set_mode(vid.size)
    fps = vid.fps
    frame_delay = int(1000 / fps)  # 每帧间隔毫秒数

    # 逐帧遍历视频
    for frame in vid.iter_frames(fps=fps, dtype='uint8'):
        # 将MoviePy帧转换为Pygame可识别的表面
        pygame_frame = pygame.surfarray.make_surface(frame.swapaxes(0, 1))
        screen.blit(pygame_frame, (0, 0))
        pygame.display.update()

        # 处理Pygame事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                exit()
            if event.type == pygame.MOUSEBUTTONDOWN:
                vid.close()
                maingame()
                return  # 退出当前函数,进入主游戏

        # 控制播放速度,保证帧率一致
        pygame.time.delay(frame_delay)

注意事项

  • 初始化Pygame窗口时,要设置和视频相同的分辨率(vid.size),避免画面拉伸。
  • 如果视频有音频需求,可以用Pygame的音频模块单独加载并播放视频音频,MoviePy的iter_frames()不会处理音频。

内容的提问来源于stack exchange,提问作者shadow techie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:01:31