PySide2 播放视频

来源:https://xxzkid.github.io/2024/pyside2-player-video-1/

import os
import sys
import traceback

from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *

import home_ui
import cv2

print('os:', sys.platform)
if sys.platform.lower().startswith('linux'):
    os.environ.pop("QT_QPA_PLATFORM_PLUGIN_PATH")


class HomeWindow(QMainWindow):

    def __init__(self):
        super(HomeWindow, self).__init__()
        self.ui = home_ui.Ui_MainWindow()
        self.ui.setupUi(self)

        self.frame_timer = QTimer()
        self.video_capture = cv2.VideoCapture('a.mp4')
        self.fps = self.video_capture.get(cv2.CAP_PROP_FPS)

        self.frame_timer.timeout.connect(self.display_video_stream)
        self.frame_timer.start(int(1000 // self.fps))

    def display_video_stream(self):
        display_with = self.ui.label_video.width()
        display_height = self.ui.label_video.height()
        try:
            ret, cv_img = self.video_capture.read()
            if not ret:
                return False
            rgb_image = cv2.cvtColor(cv_img, cv2.COLOR_BGR2RGB)
            h, w, ch = rgb_image.shape
            bytes_per_line = ch * w
            convert_to_qt_format = QImage(rgb_image.data, w, h, bytes_per_line, QImage.Format_RGB888)
            p = convert_to_qt_format.scaled(display_with, display_height, Qt.KeepAspectRatio)
            self.ui.label_video.setPixmap(QPixmap.fromImage(p))
        except:
            print(f'{traceback.format_exc()}')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = HomeWindow()
    window.show()
    sys.exit(app.exec_())
  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以通过使用 PySide2 来实现视频播放进度条。以下是一个简单的示例代码: ```python import sys from PySide2.QtCore import Qt from PySide2.QtWidgets import QApplication, QMainWindow, QSlider, QStyle, QWidget, QVBoxLayout, QLabel, QFileDialog, QPushButton, QHBoxLayout, QMessageBox from PySide2.QtMultimedia import QMediaPlayer, QMediaContent, QMediaMetaData class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("视频播放器") self.setGeometry(100, 100, 800, 600) self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface) self.mediaPlayer.setVolume(50) self.videoWidget = QWidget(self) self.setCentralWidget(self.videoWidget) self.slider = QSlider(Qt.Horizontal) self.slider.setRange(0, 0) self.slider.sliderMoved.connect(self.setSliderValue) self.playButton = QPushButton("播放") self.playButton.clicked.connect(self.play) self.openButton = QPushButton("打开") self.openButton.clicked.connect(self.openFile) controlLayout = QHBoxLayout() controlLayout.setContentsMargins(0, 0, 0, 0) controlLayout.addWidget(self.playButton) controlLayout.addWidget(self.openButton) layout = QVBoxLayout() layout.addWidget(self.videoWidget) layout.addWidget(self.slider) layout.addLayout(controlLayout) self.videoWidget.setLayout(layout) self.mediaPlayer.positionChanged.connect(self.setPosition) self.mediaPlayer.durationChanged.connect(self.setDuration) def openFile(self): fileName, _ = QFileDialog.getOpenFileName(self, "选择视频文件") if fileName != '': self.mediaPlayer.setMedia(QMediaContent(QUrl.fromLocalFile(fileName))) self.mediaPlayer.play() def play(self): if self.mediaPlayer.state() == QMediaPlayer.PlayingState: self.mediaPlayer.pause() self.playButton.setText("播放") else: self.mediaPlayer.play() self.playButton.setText("暂停") def setDuration(self, duration): self.slider.setMaximum(duration) def setPosition(self, position): self.slider.setValue(position) def setSliderValue(self, value): self.mediaPlayer.setPosition(value) if __name__ == '__main__': app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) ``` 这段代码创建了一个简单的视频播放器窗口。窗口中包含一个播放/暂停按钮,一个打开按钮,以及一个进度条。你可以通过点击打开按钮选择一个视频文件进行播放。进度条会根据视频的播放进度进行更新。 请确保已经安装了 PySide2 和对应的视频解码器,以便正常运行该代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值