PyQt5学习笔记--基于Qt Designer加载、播放和保存视频

这篇具有很好参考价值的文章主要介绍了PyQt5学习笔记--基于Qt Designer加载、播放和保存视频。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1--基于Qt Designer设计ui文件

2--代码

3--结果

4--补充

5--加载、播放、转换和保存视频的实例


1--基于Qt Designer设计ui文件

pyqt5中qvideowidget,Pyqt5学习笔记,qt,学习,ui

2--代码

from PyQt5.QtWidgets import *
from PyQt5.QtMultimedia import *
from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5 import uic
import sys

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        self.ui = uic.loadUi("./video.ui")  # 加载由Qt Designer设计的ui文件

        # 加载自定义ui属性
        self.openGLWidget = self.ui.openGLWidget
        self.video_btn1 = self.ui.pushButton
        self.video_btn2 = self.ui.pushButton_2

        # 创建一个布局将 QVideoWidget 内嵌到 自定义ui的Widget中
        layout = QHBoxLayout()
        self.vw = QVideoWidget()
        layout.addWidget(self.vw)
        self.openGLWidget.setLayout(layout)

        # img_btn1 绑定槽函数 loadVideo()
        self.video_btn1.clicked.connect(self.loadVideo)

        # img_btn2 绑定槽函数 playVideo()
        self.video_btn2.clicked.connect(self.playVideo)

    def loadVideo(self):
        self.player = QMediaPlayer()
        self.player.setVideoOutput(self.vw) # 视频播放的widget
        self.player.setMedia(QMediaContent(QFileDialog.getOpenFileUrl()[0])) # 选取视频文件

    def playVideo(self):
        self.player.play() # 播放视频
        self.vw.show()

if __name__ == '__main__':

    app = QApplication(sys.argv)
    w = MyWindow()
    w.ui.show()
    sys.exit(app.exec_())

3--结果

pyqt5中qvideowidget,Pyqt5学习笔记,qt,学习,ui

pyqt5中qvideowidget,Pyqt5学习笔记,qt,学习,ui

pyqt5中qvideowidget,Pyqt5学习笔记,qt,学习,ui

4--补充

① 上述代码只实现了加载视频和播放视频的功能,缺少暂停、进度移动等常见功能。

② 上述代码将 QVideoWidget 通过一个layout布局的形式内嵌到自定义的 QOpenGLWidget 中,但播放测试视频的时候存在视频无法覆盖 Widget 的问题。

5--加载、播放、转换和保存视频的实例

① 基于Qt Designer 设计 ui 文件

pyqt5中qvideowidget,Pyqt5学习笔记,qt,学习,ui

② 代码

注:代码具有保存视频的功能,转换视频则采取了最简单的灰度化处理操作作为功能展示。

from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import *
from PyQt5.QtMultimedia import *
from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5 import uic
import sys
import cv2

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        self.ui = uic.loadUi("./video.ui")  # 加载由Qt Designer设计的ui文件

        # 加载自定义ui属性
        self.openGLWidget1 = self.ui.openGLWidget
        self.QGraphView = self.ui.graphicsView
        self.video_btn1 = self.ui.pushButton
        self.video_btn2 = self.ui.pushButton_2
        self.gray_btn3 = self.ui.pushButton_3
        self.gray_btn4 = self.ui.pushButton_4

        # 创建一个布局将 QVideoWidget 内嵌到 自定义ui的Widget1中
        layout1 = QHBoxLayout()
        self.vw1 = QVideoWidget()
        layout1.addWidget(self.vw1)
        self.openGLWidget1.setLayout(layout1)

        # video_btn1 绑定槽函数 loadVideo()
        self.video_btn1.clicked.connect(self.loadVideo)

        # video_btn2 绑定槽函数 playVideo()
        self.video_btn2.clicked.connect(self.playVideo)

        # gray_btn3 绑定槽函数 convert_gray()
        self.gray_btn3.clicked.connect(self.convert_gray)

        # gray_btn4 绑定槽函数 save_gray()
        self.gray_btn4.clicked.connect(self.save_gray)

    def loadVideo(self):
        self.player = QMediaPlayer()
        self.player.setVideoOutput(self.vw1) # 视频播放的widget
        self.video_file = QFileDialog.getOpenFileUrl()[0]
        self.video_path = self.video_file.toString()[8:]
        print(self.video_path)
        self.player.setMedia(QMediaContent(self.video_file))# 选取视频文件

    def playVideo(self):
        self.player.play() # 播放视频
        self.vw1.show()

    def convert_gray(self):

        cap = cv2.VideoCapture(self.video_path)
        fps = cap.get(cv2.CAP_PROP_FPS)

        while True:
            ret, frame = cap.read()
            if not ret:
                break
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 灰度图转换
            frame = QImage(gray.data, gray.shape[1], gray.shape[0], gray.strides[0], QImage.Format_Indexed8)
            pix = QPixmap.fromImage(frame)
            item = QGraphicsPixmapItem(pix)  # 创建像素图元
            scene = QGraphicsScene()  # 创建场景
            scene.addItem(item)
            self.QGraphView.setScene(scene)  # 将场景添加至视图
            self.QGraphView.fitInView(item)  # 自适应大小
            cv2.waitKey(int((1/fps)*1000))

        cap.release()

    def save_gray(self):
        self.output_path = self.video_path.rsplit("/", 1)[0] + '/gray_' + self.video_path.rsplit("/", 1)[1]
        cap = cv2.VideoCapture(self.video_path)
        h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
        w = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
        fps = cap.get(cv2.CAP_PROP_FPS)
        fourcc = cv2.VideoWriter_fourcc(*'XVID')
        writer = cv2.VideoWriter(filename = self.output_path, fourcc = fourcc, fps = fps,
                                 frameSize = (int(w), int(h)), isColor = 0)
        while True:
            ret, frame = cap.read()
            if not ret:
                break
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # 灰度图转换
            writer.write(gray)  # 保存灰度图

        cap.release()

if __name__ == '__main__':

    app = QApplication(sys.argv)
    w = MyWindow()
    w.ui.show()
    sys.exit(app.exec_())

 ③ 结果展示:

pyqt5中qvideowidget,Pyqt5学习笔记,qt,学习,ui

 文章来源地址https://www.toymoban.com/news/detail-608618.html

到了这里,关于PyQt5学习笔记--基于Qt Designer加载、播放和保存视频的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PyQt5 Qt Designer使用(界面显示与业务逻辑分离模式)

    Qt Designer运行界面: MainWinSignalSlog02.ui Ui_MainWinSignalSlog02.py CallMainWinSignalSlog02.py

    2024年02月15日
    浏览(30)
  • PyQt5利用Qt Designer制作一个可以拖动获取文件信息的页面

    前言 本篇在讲什么 用pyqt5制作一个简单的程序,拖动文件或脚本可以读取文件信息 本篇适合什么 适合 初学PyQt5 的小白 本篇需要什么 对 Python 语法有简单认知 对 Qt 有简单认知 依赖 Pycharm 编辑器 本篇的特色 具有全流程的 图文教学 重实践,轻理论,快速上手 提供全流程的

    2024年01月15日
    浏览(53)
  • PyQt5教程:如何在PyCharm中添加Qt Designer、PyUIC、PyRcc外部工具?

    Qt Designer 、PyUIC和PyRcc是Qt框架下的三个重要工具,总的来说,这三个工具各司其职,相辅相成,能显著提升Qt开发的速度与效率。 Qt Designer:是一个用于创建图形用户界面的工具,可轻松构建复杂的用户界面。它基于MVC架构,可以将界面设计与逻辑分离,使得开发更为便捷。

    2024年04月28日
    浏览(27)
  • 【python】软件开发——PyQt5、Qt Designer、信号与槽机制、计算器实现

    PyQt5 是一个基于 Python 的 GUI 框架,用于创建跨平台的桌面应用程序。它是 Qt 库的 Python 绑定,结合了 Python 的简洁和易用性以及 Qt 框架的强大功能。 Qt 是一个流行的 C++ 跨平台应用程序开发框架,提供了丰富的图形界面组件、网络通信、数据库访问、多线程等功能。PyQt5 允许

    2024年02月04日
    浏览(30)
  • PyQt5利用Qt designer(QT设计师)使用tab widget和stacked widget实现多页面切换

    本文只提供一种设计思路来完成简单的页面切换功能,并没有涉及页面的美化以及复杂的业务功能实现。 点击tab页对tab widget的tab页进行切换效果图: 点击radio button驱动stacked widget多页面切换效果图: 下面进行分步说明。 打开qt designer,新建一个widget窗口。 将一个tab widget拖

    2024年02月03日
    浏览(44)
  • python中的yolov5结合PyQt5,使用QT designer设计界面没正确启动的解决方法

    一、窗体设计test: 默认你已经设计好了窗体后: 这时你需要的是保存生成的untitle.ui到某个文件夹下,然后在命令行中奖.ui转换为.py(,通过​​pyqt5​​​提供的转换工具,将​​ui​​​文件转换成​​python​​的代码) 或者使用在PyCharm中安装的工具: 然后你会看到mai

    2024年02月07日
    浏览(39)
  • 安装 Pyqt5 和 Designer

    Name– PyUIC Program– E:pythonpythonpython.exe (你的python文件路径) Arguments– -m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py Working directory– $FileDir$

    2024年01月23日
    浏览(38)
  • pyqt5使用Designer实现按钮上传图片

    1、ui界面 2、ui转py代码 其中 uploadimg.py 代码如下: 3、upload_main.py主函数代码 upload_main.py 代码如下: 4、效果图

    2024年02月04日
    浏览(40)
  • PyQt5 UI Designer使用pyqtgraph绘制波形

    包含了两个QWidget控件也可以是QGraphicsView控件类型。 两个控件分别提升为pyqtgraph.GraphicsLayoutWidget类型和pyqtgraph.PlotWidget GraphicsLayoutWidget类型通过addPlot方法添加波形数据,每个波形都占有独立的区域。 plt1 = self.graphicsLayout.addPlot(y=np.random.normal(size=1000), title=“温度”) plt2 = self.

    2024年02月06日
    浏览(32)
  • PyQt5学习笔记--多线程处理、数据交互

    目录 1--引入多线程的原因 2--PyQt多线程的基本知识 3--多线程登录程序的实例 4--参考 ① 如果Qt只采用单线程任务的方式,当遇到数据处理慢的情形时,会出现GUI卡死的情况。 ② 使用下述例子展示单线程任务的缺陷: ③ 代码: ④ 结果展示: 当点击第一个button时,GUI会出现卡

    2023年04月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包