Pygame教程系列二:MoviePy视频播放篇

article/2025/10/3 17:42:38

【前言】

     在pygame 2.0.0版本之前,播放视频可以使用pygame.movie.Movie('xxxx.mpg')播放(只支持.mpg格式的视频),但是在pygame
2.0.0之后,作者因为觉得视频模块维护成本太高就给抛弃了,假如你使用pygame 2.0.0+,还调用上述方法就会出现以下报错:NotImplementedError: movie module not available (ModuleNotFoundError: No module named 'pygame.movie'),那么,用pygame游戏引擎开发出来的界面还有办法可以播放视频吗?寻寻觅觅找了好久,发现有个叫MoviePy的python模块刚好是利用pygame进行视频预览的,可以拿来一用

一、MoviePy简介

      MoviePy是一个用于视频编辑的Python模块,可用于基本操作(例如剪切,串联,标题插入),视频合成(也称为非线性编辑),视频处理或创建高级效果,也可以读写最常见的视频格式,包括GIF。

二、MoviePy安装

使用pip进行安装

pip install moviepy

上面安装过程中,会把它的依赖库: Numpy, imageio, Decorator, tqdm,ffmpeg 自动下载安装好

三、MoviePy使用

阅读本篇之前,建议先阅读上一篇:Pygame教程系列一:快速入门篇,本篇只是在上一篇的基础上增加一个开头视频的播放

1、案例效果展示

在这里插入图片描述

2、示例代码

from moviepy.editor import *
import pygame
# 标识是否退出循环
exitFlag = False
# 设置画面刷新的帧率,即1s内刷新几次
FPS = 10
# 播放开头视频,截取开始的3s,来播放
clip = VideoFileClip(r'E:\AS-workspace\pygameTest\video\TomCat.mp4').subclip(0,3)
# 设置窗口标题
pygame.display.set_caption("pygame视频教程")
# 设置窗口大小
surface = pygame.display.set_mode(clip.size)
# 设置icon
icon = pygame.image.load('E:\AS-workspace\pygameTest\drawable\icon.png').convert_alpha()
pygame.display.set_icon(icon)
# 全屏模式预览播放
clip.preview()
# 关闭并释放资源
clip.close()
# 加载本地图片
bgSurface = pygame.image.load('E:\AS-workspace\pygameTest\drawable\BG.jpg').convert()
# 获取游戏时钟
clock = pygame.time.Clock()
# 图片缩放
scaleImg = pygame.transform.scale(icon, (400, 400))
# 获取图片的矩形框
rect = scaleImg.get_rect()
# 移动步长
step = 10
# 绘制背景
surface.blit(bgSurface,(0,0))
# 刷新帧率
newRect = None
while not exitFlag:clock.tick(FPS)# 重新绘制背景指定区域,等同于擦除图片效果if rect:surface.blit(bgSurface, rect,rect)# 图片移动指定步长newRect = rect.move(step, 0)# 弹出事件,这个一定要写,要不事件栈满了之后就会卡死for event in pygame.event.get():# 点击关闭if event.type == pygame.QUIT:exitFlag = True# 绘制图片到屏幕画布指定区域surface.blit(scaleImg,newRect)# 控制在窗口内来回移动if newRect.x > 800 - newRect.w:step = -10elif newRect.x < 0:step = 10# 更新绘制到屏幕上pygame.display.update([rect,newRect])rect = newRectif __name__ == '__main__':pass

3、代码详析

1)使用MoviePy的视频预览功能,需要声明导入以下库:

from moviepy.editor import *

注意,一般IDE工具会提示导入以下库:

from moviepy.video.io.VideoFileClip import VideoFileClip

但是,这个类VideoFileClip里面并没有preview()这个预览方法,因为这个方法是在moviepy.editor这个类中声明赋值VideoFileClip类的,所以按工具提示导入会找不到preview()方法
在这里插入图片描述

2)对比于上一篇的示例代码,你会发现这一篇使用pygame时候,没有调用pygame.init(),可能有人会问:上一篇不是说使用pygame之前一定要先初始化吗?答案是:没错,使用之前一定要先调用pygame.init()进行初始化,这一篇你没看到我代码中有调用这个初始化代码,那是因为moviepy.video.io.preview这个类已经有对pygame进行初始化了,下图是该类的截图:
在这里插入图片描述
3)上面的这个导入语句:from moviepy.editor import * 会将 moviepy.video.io.preview类导入,导入preview的同时,那个pg.init()这个初始化语句也已经被导入调用了,所以在这里我们就不需要再多调用一遍了

4)clip = VideoFileClip(r'E:\AS-workspace\pygameTest\video\TomCat.mp4').subclip(0,3), 加载本地视频并截取视频的0~3s部分赋值给clip对象

5)pygame.display.set_caption("pygame视频教程"),设置窗口的标题;其实从上面preview类的截图可看到,preview类里面有设置窗口标题为MoviePy,这里需要重新设置为自己想要的标题,否则标题就会显示MoviePy

6)在调用clip.preview()之前,正常来说,是不应该调用set_mode()的,因为在preview()方法中会重新设置窗口大小为视频的大小:
在这里插入图片描述

7)但是假如不先调用set_mode(),又想要调用pygame.image.load() 加载图片然后设置窗口图标的话, 运行会报错:pygame.error: No video mode has been set,所以只能老实地先设置窗口大小为视频的宽高,然后再设置窗口图标

# 设置窗口大小
surface = pygame.display.set_mode(clip.size)
# 设置icon
icon = pygame.image.load('E:\AS-workspace\pygameTest\drawable\icon.png').convert_alpha()
pygame.display.set_icon(icon)

8)调用clip.preview(),就可以播放视频,这个方法也可以设置直接全屏播放:clip.preview(fullscreen=True),还可以设置视频播放的帧率:clip.preview(fps=5)

9)视频播放完毕之后,记得调用clip.close(),来释放占用的资源

【扩展讨论】

我们看看preview()方法里面的实现:
在这里插入图片描述
在这里插入图片描述
1、实际上moviePy preview播放视频是把视频某个时间点对应的那一帧图片绘制到屏幕surface对象而已

2、preview()也在循环体中对事件队列做了处理,在点击窗口的关闭按钮或者按Esc键就会退出绘制视频画面的循环体,所以最上面那段代码,假如我们在播放视频时候点击关闭按钮,那么就会直接跳过播放视频这段代码,继续执行clip.preview()后面的代码


http://chatgpt.dhexx.cn/article/B7PlgGdI.shtml

相关文章

Pygame 教程(4):图像传输和绘制文本

本章&#xff0c;你将学会如何传输图像和绘制文本。 导航 上一章&#xff1a;绘制图形 下一章&#xff1a;监测游戏时间 文章目录 导航加载图像导出图像绘制文本实例&#xff1a;画板添加常量限制坐标定义属性绘制色板更改线条粗细处理鼠标事件处理键盘事件调用事件处理方法完…

Pygame基础教程(一)

写在前面的话&#xff1a; 本系列教程仅有一些在本机调试通过的代码&#xff08;如代码中发现bug&#xff0c;恳请包涵&#xff09;。除代码中出现的一些主要注释外&#xff0c;不会出现太多其他文字解释&#xff0c;但是&#xff0c;文章中会给出主要模块的官方文档地址。再次…

Pygame 教程(5):监测游戏时间

本章&#xff0c;你将学习如何监测游戏时间。 导航 上一章&#xff1a;图像传输和绘制文本 下一章&#xff1a;努力更新中…… 文章目录 导航监测时间游戏帧速率实例&#xff1a;绘图性能对比结语 监测时间 在游戏程序中&#xff0c;时常需要随着时间的流逝而做出不同的动作…

Pygame教程系列四:播放音频篇

【前言】 pygame播放音频文件这部分相对来说比较简单&#xff0c;主要是用到pygame.mixer模块&#xff0c;不过也有一些地方需要注意的&#xff0c;咱们直接先看看案例 1、案例效果图 2、案例代码 import pygame from mutagen.mp3 import MP3 # 标识是否退出循环 exitFlag Fa…

python3.8安装pygame_Python3.8安装Pygame教程

注&#xff1a;因为最近想用一下Python做一些简单小游戏的开发作为项目练手之用&#xff0c;而Pygame模块里面提供了大量的有用的方法和属性。今天我们就在之前安装过PyCharm的基础上&#xff0c;安装Pygame&#xff0c;下面是安装的步骤&#xff0c;希望能够帮到大家。 第一步…

Pygame 教程(3):绘制图形

本章&#xff0c;你将学习如何在 Pygame 中绘制图形。 导航 上一章&#xff1a;重要的概念及对象 下一章&#xff1a;图像传输和绘制文本 文章目录 导航抗锯齿draw 模块实例&#xff1a;跟随鼠标的图形创建初始窗口添加变量捕捉鼠标事件绘制图形完整代码 结语 抗锯齿 抗锯齿…

Mac Pycharm导入Pygame教程(超细)

首先先新建一个想要使用Pygame的项目 进入项目后&#xff0c;点击文件&#xff08;File&#xff09;——新项目设置&#xff08;settings&#xff09; 点击新项目的偏好设置&#xff08;Preferences for new project &#xff09; 随后可以看到 点击Python 编译器&#xff0…

mac python3.8上怎么安装pygame 第三方库_Python3.8安装Pygame教程步骤详解

注:因为最近想用一下python做一些简单小游戏的开发作为项目练手之用,而Pygame模块里面提供了大量的有用的方法和属性。今天我们就在之前安装过PyCharm的基础上,安装Pygame,下面是安装的步骤,希望能够帮到大家。 第一步 安装Python和pip 如果已安装,使用python --version …

Pygame教程系列一:快速入门篇

【简介】 Pygame 是python用来开发视频游戏的游戏引擎&#xff0c;底层主要是SDL库实现&#xff0c;算是目前利用python开发小游戏的一个性能比较高的一个游戏框架 一、安装pygame 使用pip下载安装 pip install pygame二、入门案例详析 1、示例效果 2、示例代码 import os …

pygame教程3

目录 做个小游戏精灵类精灵类介绍使用精灵类 做个小游戏 这个小游戏使用了pygame教程2的知识。 #↓初始化 import pygame,sys from pygame.locals import * pygame.init()#初始化pygame。 screen pygame.display.set_mode((800,600)) pygame.display.set_caption("Hell…

pygame教程2

目录 响应键盘上的事件让画面动起来了解x轴和y轴画圆形圆形动起来 响应键盘上的事件 import pygame#导入pygame。 import sys#导入sys from pygame.locals import *#导入pygame所有的常量&#xff0c;方便以后使用。 pygame.init()#初始化pygame。 screen pygame.display.set…

pygame教程笔记

pygame教程 安装pygameGame Development 1-1: Getting Started with PygameGame Development 1-2: Working with SpritesGame Development 1-3: More About SpritesPygame Shmup Part 1: Player Sprite and ControlsPygame Shmup Part 2: Enemy SpritesPygame Shmup Part 3: Co…

pygame基础教程

pygame简介 pygame可以实现python游戏的一个基础包。 pygame实现窗口 初始化pygame&#xff0c;init()类似于java类的初始化方法&#xff0c;用于pygame初始化。 pygame.init() 设置屏幕&#xff0c;(500,400)设置屏幕初始大小为500 * 400的大小&#xff0c; 0和32 是比较高…

Python pygame(GUI编程)模块最完整教程(1)

提示&#xff1a;下滑文章左侧可以查看目录&#xff01;本教程分为多篇&#xff0c;总目录如下。 总目录&#xff1a; README.md Python-ZZY/Python-Pygame最完整教程 - Gitee.com 1 初识pygame 1.1 简介 pygame是python中一个流行的GUI编程模块&#xff0c;是专门为了开发游…

Pygame教程(非常详细)

文章目录 教程特点阅读条件 Pygame是什么扩展知识 Pygame下载和安装1) pip包管理器安装2) 二进制安装包安装 第一个Pygame程序初始化程序创建Surface对象事件监听游戏循环 Pygame Display显示模块详解Pygame Surface创建图像Pygame Transform图像变形Pygame Time时间控制详解1)…

GeoWave0.9.8开发人员指南

GeoWave0.9.8开发人员指南 官方英文地址&#xff1a;http://s3.amazonaws.com/geowave/0.9.8/docs/devguide.html 介绍 什么是GeoWave GeoWave是一个开源库&#xff0c;用于在排序的键值数据存储和流行的大数据框架之上存储&#xff0c;索引和搜索多维数据。GeoWave包含特定的…

行人检测之DPM

基于可识别训练的部件模型的目标检测 Object Detection with Discriminatively Trained Part Based Models 摘要 基于多尺度可变形的部件模型我们来描述一个目标检测系统。我们的系统能够表示高度可变的对象类并在PASCAL目标检测挑战达到最先进的结果。虽然可变形部件模型变…

Xuxiang Qi--Deep Learning based Semantic Labelling of 3D Point Cloud in Visual SLAM

元学习论文总结||小样本学习论文总结 2017-2019年计算机视觉顶会文章收录 AAAI2017-2019 CVPR2017-2019 ECCV2018 ICCV2017-2019 ICLR2017-2019 NIPS2017-2019 提出了一种建立三维密集语义地图的方法&#xff0c;采用GPU&#xff0c;ROS消息通信无法支持。 摘要 三维(3D)点云…

古老的DPM

基于可识别训练的部件模型的目标检测 Object Detection with Discriminatively Trained Part Based Models 摘要 基于多尺度可变形的部件模型我们来描述一个目标检测系统。我们的系统能够表示高度可变的对象类并在PASCAL目标检测挑战达到最先进的结果。虽然可变形部件模型变得…

OpenCV-Python (官方)中文教程(部分一)

官网链接(英文版):https://docs.opencv.org/4.1.1/d6/d00/tutorial_py_root.html 第一章. OpenCV简介 了解如何在计算机上设置OpenCV-Python&#xff01; 1.OpenCV-Python教程简介 1.1 OpenCV OpenCV是由Gary Bradsky于1999年在Intel公司创建的&#xff0c;第一次发布是在…