python - 如何使用 PyQt5 播放视频的特定部分

标签 python python-3.x video pyqt

我想播放视频的某个部分,例如使用PyQt5播放视频从第30秒到第33秒。我正在使用 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()

最佳答案

您可以使用 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_())

关于python - 如何使用 PyQt5 播放视频的特定部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53148815/

相关文章:

iphone - 为什么我的 <video autoplay> 元素直到我点击它才开始在 iPhone 上播放?即使使用 JavaScript?

video - 如何为网站的视频创建嵌入代码?

python - Pyparsing setResultsName属性报错: "no such attribute"

python - python中如何为numpy数组分配内存?

python - 如果循环更新其自身之外的内容 - 如何构建等效的或 lambda/列表理解?

python - 打印 Python3 列表元素的内容而不是值

python - 使用 Mechanize (python)设置 HTTPS 代理 - 可能吗?

python - 我如何打印一些东西然后打印它的列表?

Python 3 获取 HTTP 页面

php - 如何获得最低质量的YouTube视频?