Python使用QT播放视频

先看下效果 

 

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

有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.csdn.net/download/g313105910/15904769

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
你可以使用QtPython播放本地视频。首先,确保已经安装了PyQt库。然后,可以按照以下步骤进行操作: 1. 导入必要的模块: ```python from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent from PyQt5.QtMultimediaWidgets import QVideoWidget from PyQt5.QtCore import Qt, QUrl ``` 2. 创建一个应用程序对象和窗口: ```python app = QApplication([]) window = QWidget() layout = QVBoxLayout() window.setLayout(layout) window.setWindowTitle("视频播放器") ``` 3. 创建一个QVideoWidget对象来显示视频: ```python video_widget = QVideoWidget() layout.addWidget(video_widget) ``` 4. 创建一个QMediaPlayer对象来控制视频: ```python player = QMediaPlayer() ``` 5. 将QVideoWidget设置为QMediaPlayer的输出: ```python player.setVideoOutput(video_widget) ``` 6. 创建一个QMediaContent对象来加载视频文件: ```python video_path = "路径/到/视频文件.mp4" video_url = QUrl.fromLocalFile(video_path) media = QMediaContent(video_url) ``` 7. 将QMediaContent对象设置给QMediaPlayer: ```python player.setMedia(media) ``` 8. 播放视频: ```python player.play() ``` 9. 显示窗口: ```python window.show() ``` 完整的代码示例: ```python from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent from PyQt5.QtMultimediaWidgets import QVideoWidget from PyQt5.QtCore import Qt, QUrl app = QApplication([]) window = QWidget() layout = QVBoxLayout() window.setLayout(layout) window.setWindowTitle("视频播放器") video_widget = QVideoWidget() layout.addWidget(video_widget) player = QMediaPlayer() player.setVideoOutput(video_widget) video_path = "路径/到/视频文件.mp4" video_url = QUrl.fromLocalFile(video_path) media = QMediaContent(video_url) player.setMedia(media) player.play() window.show() app.exec_() ``` 请记得将代码中的"路径/到/视频文件.mp4"替换为你实际的视频文件路径。希望这可以帮助到你!
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

花开花落的个人博客

你的鼓励是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值