gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:13:37 24 4
gpt4 key购买 nike

我想播放一段视频的某个部分,例如,使用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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com