Python使用QT播放视频

本文介绍使用PyQt5实现的简易视频播放器,包括基本播放功能及全屏、进度控制等高级特性,并提供源代码及安装说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先看下效果 

 

点击打开视频->进行视频选择,可以暂停和播放,双击可以全屏,代码也是网上收集的

有2个demo,第一个是简单版,第二个demo增加了播放,暂停,进度条,全屏

需要安装一个视频解码器,K-Lite Codec Pack,下载地址http://www.codecguide.com/download_kl.htm

demo1.py

from PyQt5.QtWidgets import *
from PyQt5.QtMultimedia import *
from PyQt5.QtMultimediaWidgets import QVideoWidget
import sys
if __name__ == '__main__':
    app = QApplication(sys.argv)
    player = QMediaPlayer()
    vw = QVideoWidget()
    #定义视频显示的widget
    vw.show()
    player.setVideoOutput(vw)
    #视频播放输出的widget,就是上面定义的
    player.setMedia(QMediaContent(QFileDialog.getOpenFileUrl()[0]))  #选取视频文件
    player.play()                               #播放视频
    sys.exit(app.exec_())

demo2中包含3个文件

demo2.py

from PyQt5.QtWidgets import *
from PyQt5.QtMultimedia import *
from VideoUi import VideoUi
from VideoWidget import VideoWidget
import sys


class MainWindow(VideoUi, QMainWindow):
    def __init__(self):
        super(VideoUi, self).__init__()
        self.setupUi(self)
        self.videoFullScreen = False   # 判断当前widget是否全屏
        self.videoFullScreenWidget = VideoWidget()   # 创建一个全屏的widget
        self.videoFullScreenWidget.setFullScreen(1)
        self.videoFullScreenWidget.hide()               # 不用的时候隐藏起来
        self.player = QMediaPlayer()
        self.player.setVideoOutput(self.wgt_video)  # 视频播放输出的widget,就是上面定义的
        self.btn_open.clicked.connect(self.openVideoFile)   # 打开视频文件按钮
        self.btn_play.clicked.connect(self.playVideo)       # play
        self.btn_stop.clicked.connect(self.pauseVideo)       # pause
        self.player.positionChanged.connect(self.changeSlide)      # change Slide
        self.videoFullScreenWidget.doubleClickedItem.connect(self.videoDoubleClicked)  #双击响应
        self.wgt_video.doubleClickedItem.connect(self.videoDoubleClicked)   #双击响应
    def openVideoFile(self):
        self.player.setMedia(QMediaContent(QFileDialog.getOpenFileUrl()[0]))  # 选取视频文件
        self.player.play()  # 播放视频

    def playVideo(self):
        self.player.play()
    def pauseVideo(self):
        self.player.pause()
    def changeSlide(self,position):
        self.vidoeLength = self.player.duration()+0.1
        self.sld_video.setValue(round((position/self.vidoeLength)*100))
        self.lab_video.setText(str(round((position/self.vidoeLength)*100,2))+'%')
    def videoDoubleClicked(self,text):
        if self.player.duration() > 0:  # 开始播放后才允许进行全屏操作
            if self.videoFullScreen:
                self.player.pause()
                self.videoFullScreenWidget.hide()
                self.player.setVideoOutput(self.wgt_video)
                self.player.play()
                self.videoFullScreen = False
            else:
                self.player.pause()
                self.videoFullScreenWidget.show()
                self.player.setVideoOutput(self.videoFullScreenWidget)
                self.player.play()
                self.videoFullScreen = True

if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())

VideoUi.py

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'GUI.ui'
#
# Created by: PyQt5 UI code generator 5.6
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtWidgets
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QAction, qApp
from PyQt5.QtWidgets import (QWidget, QLabel, QLineEdit,
    QTextEdit, QGridLayout, QApplication)
from VideoWidget import VideoWidget

class VideoUi(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 650)

        #获取画布
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        #视频播放控件
        self.wgt_video = VideoWidget(self.centralwidget)
        self.wgt_video.setGeometry(QtCore.QRect(0, 0, 800, 500))
        self.wgt_video.setObjectName("wgt_video")

        #选择文件按钮
        self.btn_open = QtWidgets.QPushButton(self.centralwidget)
        self.btn_open.setGeometry(QtCore.QRect(5, 570, 80, 30))
        self.btn_open.setObjectName("btn_open")

        #进度条
        self.sld_video = QtWidgets.QSlider(self.centralwidget)
        self.sld_video.setGeometry(QtCore.QRect(5, 530, 750, 30))
        self.sld_video.setMaximum(100)
        self.sld_video.setOrientation(QtCore.Qt.Horizontal)
        self.sld_video.setObjectName("sld_video")

        #进度值
        self.lab_video = QtWidgets.QLabel(self.centralwidget)
        self.lab_video.setGeometry(QtCore.QRect(765, 529, 50, 30))
        self.lab_video.setObjectName("lab_video")

        #播放按钮
        self.btn_play = QtWidgets.QPushButton(self.centralwidget)
        self.btn_play.setGeometry(QtCore.QRect(90, 570, 50, 30))
        self.btn_play.setObjectName("btn_play")

        #停止按钮
        self.btn_stop = QtWidgets.QPushButton(self.centralwidget)
        self.btn_stop.setGeometry(QtCore.QRect(145, 570, 50, 30))
        self.btn_stop.setObjectName("btn_stop")

        MainWindow.setCentralWidget(self.centralwidget)

        exitAct = QAction(QIcon('exit.png'), '&Exit', self)
        exitAct.setShortcut('Ctrl+Q')
        exitAct.setStatusTip('Exit application')
        exitAct.triggered.connect(qApp.quit)
        self.statusBar()
        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(exitAct)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.btn_open.setText(_translate("MainWindow", "打开视频文件"))
        self.btn_play.setText(_translate("MainWindow", "播放"))
        self.btn_stop.setText(_translate("MainWindow", "暂停"))
        self.lab_video.setText(_translate("MainWindow", "0%"))

VideoWidget.py

from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5.QtCore import *
class VideoWidget(QVideoWidget):
    doubleClickedItem = pyqtSignal(str)  # 创建双击信号
    def __init__(self,parent=None):
        super(QVideoWidget,self).__init__(parent)
    def mouseDoubleClickEvent(self,QMouseEvent):     #双击事件
        self.doubleClickedItem.emit("double clicked")

新手可以通过pycharm建立一个新工程,然后把这4个文件放到工程中,添加依赖然后就可以运行了

代码下载地址

https://download.youkuaiyun.com/download/g313105910/15904769

Python中的多进程模块通过提供一个简单直观的API,允许在多个进程之间划分工作。通过使用多进程模块,可以在同一Python脚本上同时运行不同的进程。每个进程都有自己独立的进程ID,可以使用os.getpid()函数获取当前进程的ID。 下面是一个使用多进程模块的简单示例:首先,我们导入multiprocessing模块,定义了两个函数print_square和print_cube,分别用于打印给定数字的平方和立方。然后,我们创建了两个进程p1和p2,分别调用print_square和print_cube函数。最后,我们通过调用start()方法开启进程,join()方法等待进程完成,打印最后的完成消息。 另一个示例展示了在同一Python脚本上运行多个进程的概念。我们定义了两个worker函数,分别打印当前进程的ID。然后,我们创建了两个进程p1和p2,分别调用worker1和worker2函数。我们还可以通过调用p1.pid和p2.pid来获取进程的ID。最后,我们使用join()方法等待进程完成,检查进程是否处于活动状态。 综上所述,Python中的多进程模块提供了一个方便的方式来在同一脚本上运行不同的进程,且每个进程都有自己独立的进程ID。可以使用这些进程来行执行不同的任务,以提高程序的效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python 中的多进程](https://blog.youkuaiyun.com/a883774913/article/details/125373953)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花开花落的个人博客

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值