用20行python做个简单视频播放器,初识tkinter、cv2、PIL图像模块的使用

今天通过用python做个简单的视频播放器,做为初步入门tkinter、cv2、PIL模块的入门练习。

一 程序要求

使用python中的tkinter窗口,制作一个视频播放软件。

用20行python做个简单视频播放器,初识tkinter、cv2、PIL图像模块的使用

二 播放窗口

1 导入tkinter模块

从tkinter模块中导入所有模块

from tkinter import *

2 建立窗口和标题

# 创建Tkinter窗口
root = Tk()
root.title('视频播放器')

标题即程序窗口左上角显示的文字。

3 创建播放用的标签

# 创建一个标签用来显示视频帧
label = Label(root)
label.pack()

1 Label为创建标签的函数,创建的位置为root窗口。 下图这种不可修改文字的控件就是标签

用20行python做个简单视频播放器,初识tkinter、cv2、PIL图像模块的使用

(本图为IDLE中设置代码字体大小的窗口)

2 pack函数的功能是将label显示在窗口上,没有这一行,label标签相当于隐藏了。

4 窗口持续显示

程序的最后一行写入

root.mainloop()

用于持续显示root窗口,
不然程序一瞬间运行完了,咱们只能看到窗口一闪而过……有时快的你甚至看到不闪过。

5 运行效果

此时,程序的运行效果是这样的

用20行python做个简单视频播放器,初识tkinter、cv2、PIL图像模块的使用

三 加载并播放视频

1 加载视频

# 创建视频捕捉对象
cap = cv2.VideoCapture('32.mp4'

32.mp4是视频的名称,
这个视频要和程序放在同一个文件夹下,
如果不放在一个文件夹下,就要写明详细的绝对路径,如:
D:\video\32.mp4

2 建立一个播放视频的函数

自定义函数 update_frame

def update_frame():

3 读取下一帧

ret, frame = cap.read()

用read读取图像下一帧的内容,会返回两个值,分别赋值给retframe
ret 的值为TrueFalse,表示有没有读取到下一帧图像。
frame 的值为图像的数据数组

4 更改颜色格式

# 将BGR颜色的OpenCV帧转换为RGB颜色
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

第3步frame的图片颜色格式为BRG,此处将其改为tkinter能够识别的RGB格式。
cv2.COLOR_BGR2RGB是一个常量,直接这么用就行

5 转换图像

# 将frame图像数据转为图像
im = Image.fromarray(frame)
# 将图像进一步转为tkinter可识别的图像
img = ImageTk.PhotoImage(image=im)

6 显示图像

# 给label自定义一个属性,避免img数据被python将垃圾回收了
label.imgtk = img
# 让label控件加载图片
label.config(image=img)

7 实现视频播放效果

# 每隔10ms更新一次帧
root.after(10, update_frame)

让本窗口在10ms后,再加载一下本函数,实现图像的加载刷新

Python视频播放器源代码

import cv2
from tkinter import *
from PIL import Image, ImageTk

# 更新帧的函数
def update_frame():
    ret, frame = cap.read()
    if ret:
        # 将BGR颜色的OpenCV帧转换为RGB颜色
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

        # 将OpenCV图像转换为Pillow图像,然后转换为PhotoImage
        im = Image.fromarray(frame)
        img = ImageTk.PhotoImage(image=im)
        
        # 显示图像
        label.imgtk = img
        label.config(image=img)
        # 每隔10ms更新一次帧
        root.after(10, update_frame)
    else:
        # 如果视频结束,重新设置视频读取的起始位置
        cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
        update_frame()  # 重新开始视频播放

        # 如果视频结束,释放捕捉对象
        # 下面这行用于 播放完就停止
        # cap.release()


# 创建Tkinter窗口
root = Tk()
root.title('视频播放器')

# 创建一个标签用来显示视频帧
label = Label(root)
label.pack()

# 创建视频捕捉对象
cap = cv2.VideoCapture('32.mp4')  # 替换为你的视频文件路径

# 开始更新帧
update_frame()

# 运行应用
root.mainloop()

以下就是用python做简单的视频播放器的全部过程解析,做为初步入门tkinter、cv2、PIL模块的入门练习可试着做一下,看不太懂没关系,先自己动手做一下

本文结束

如有疑问,请直接留言!必回!
如有帮助,请点赞转发!感谢!

关注Python入门速学
带你实战快速学Python


原文始发于微信公众号(Python入门速学):用20行python做个简单视频播放器,初识tkinter、cv2、PIL图像模块的使用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/284701.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!