Как воспроизвести определенную часть видео с PyQt5 - PullRequest
0 голосов
/ 05 ноября 2018

Я хотел бы воспроизвести определенную часть видео, например, воспроизвести видео со секунды 30 до секунды 33, используя PyQt5. Я использую виджет Qmultimedia.

Вот так выглядит мой код игрока. Есть ли способ начать и закончить в определенной позиции? Я вручную вырезал видео на фрагменты и просто воспроизводил эти фрагменты, но это отнимает много времени. Спасибо!

self.player = QtMultimedia.QMediaPlayer(None, QtMultimedia.QMediaPlayer.VideoSurface)
file = QtCore.QDir.current().filePath("path")
self.player.setMedia(QtMultimedia.QMediaContent(QtCore.QUrl.fromLocalFile(file)))
self.player.setVideoOutput(self.ui.videoWidget)
self.player.play()

1 Ответ

0 голосов
/ 05 ноября 2018

Вы можете установить позицию в мс с помощью метода setPosition(), а с помощью сигнала positionChanged вы можете отслеживать истекшее время, чтобы остановить воспроизведение

import os
from PyQt5 import QtCore, QtWidgets, QtMultimedia, QtMultimediaWidgets


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        video_widget = QtMultimediaWidgets.QVideoWidget()
        self.setCentralWidget(video_widget)
        self.player = QtMultimedia.QMediaPlayer(self, QtMultimedia.QMediaPlayer.VideoSurface)
        self.player.setVideoOutput(video_widget)
        # period of time that the change of position is notified
        self.player.setNotifyInterval(1)
        self.player.positionChanged.connect(self.on_positionChanged)

    def setInterval(self, path, start, end):
        """
            path: path of video
            start: time in ms from where the playback starts
            end: time in ms where playback ends
        """
        self.player.stop()
        self.player.setMedia(QtMultimedia.QMediaContent(QtCore.QUrl.fromLocalFile(path)))
        self.player.setPosition(start)
        self._end = end
        self.player.play()

    @QtCore.pyqtSlot('qint64')
    def on_positionChanged(self, position):
        if self.player.state() == QtMultimedia.QMediaPlayer.PlayingState:
            if position > self._end:
                self.player.stop()


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    file = os.path.join(os.path.dirname(__file__), "test.mp4")
    w.setInterval(file, 30*1000, 33*1000)
    w.show()
    sys.exit(app.exec_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...