Bož*_*vić 10 python qmediaplayer pyqt5
我正在尝试QMediaPlayer创建一个..媒体播放器.我希望能够通过按下按钮来回放视频.
但设置负面playbackRate通道QMediaPlayer.setPlaybackRate似乎并没有将视频放回倒带.它只是继续前进.
我不想改变视频的位置,我希望视频以负速度播放.通过我的一些逻辑,设置playbackRate为负值会使视频反向播放.但这不会发生.如果你不能清楚地理解我,这里有一个播放应该是什么样子的视频.
以下是一些重现问题的准系统代码:
import sys
from PyQt5.QtCore import Qt, QUrl, QEvent
from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer
from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5.QtWidgets import QMainWindow, QApplication
class VideoWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
videoWidget = QVideoWidget()
self.setCentralWidget(videoWidget)
self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface)
self.mediaPlayer.setVideoOutput(videoWidget)
self.mediaPlayer.setMedia(
QMediaContent(QUrl.fromLocalFile(r"<some video file>.mp4"))
)
self.mediaPlayer.play()
app.installEventFilter(self)
def eventFilter(self, source, event):
if event.type() == QEvent.KeyPress:
key = event.key()
if key == Qt.Key_A:
self.mediaPlayer.setPlaybackRate(1.0)
elif key == Qt.Key_Y:
self.mediaPlayer.setPlaybackRate(-1.0) # This doesn't work! :(
return super().eventFilter(source, event)
def closeEvent(self, event):
self.mediaPlayer.setMedia(QMediaContent())
if __name__ == '__main__':
app = QApplication(sys.argv)
player = VideoWindow()
player.resize(640, 480)
player.show()
exitCode = app.exec_()
sys.exit(exitCode)
Run Code Online (Sandbox Code Playgroud)
我试着寻找一个解决方案,但我得到的只是文档所说的(强调我的):
可以设置小于零的值,并指示媒体将以标准速度的乘数回退.
但是,我没有看到这种效果.
我注意到了这个:
并非所有播放服务都支持更改播放速率.
我有可能无法倒回mp4吗?也许我需要安装/更改一些东西?
QMediaPlayer.playbackRate属性保存当前媒体的播放速率。该值是应用于媒体标准播放速率的乘数。
按Key_A、Key_Z、Key_Y键查看其工作原理。
如果你想快退视频,你应该使用QMediaPlayer.position属性,它保存当前媒体的播放位置。该值是当前播放位置,以自媒体开始以来的毫秒数表示。
按Key_M,Key_P键查看其工作原理。
import sys
from PyQt5.QtCore import Qt, QUrl, QEvent
from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer
from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5.QtWidgets import QMainWindow, QApplication
class VideoWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
videoWidget = QVideoWidget()
self.setCentralWidget(videoWidget)
self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface)
self.mediaPlayer.setVideoOutput(videoWidget)
self.mediaPlayer.setMedia(
QMediaContent(QUrl.fromLocalFile(r"<some video file>.mp4"))
)
self.mediaPlayer.play()
app.installEventFilter(self)
def eventFilter(self, source, event):
if event.type() == QEvent.KeyPress:
key = event.key()
# It Playback Rate !
if key == Qt.Key_A:
#self.mediaPlayer.setPlaybackRate(1.0)
self.mediaPlayer.setPlaybackRate(1.5)
elif key == Qt.Key_Z:
self.mediaPlayer.setPlaybackRate(0.8)
elif key == Qt.Key_Y:
self.mediaPlayer.setPlaybackRate(1.0)
# setPosition(int), argument is in milliseconds.
elif key == Qt.Key_M:
self.mediaPlayer.setPosition(self.mediaPlayer.position() - 10000)
elif key == Qt.Key_P:
self.mediaPlayer.setPosition(self.mediaPlayer.position() + 10000)
return super().eventFilter(source, event)
def closeEvent(self, event):
self.mediaPlayer.setMedia(QMediaContent())
if __name__ == '__main__':
app = QApplication(sys.argv)
player = VideoWindow()
player.resize(640, 480)
player.show()
exitCode = app.exec_()
sys.exit(exitCode)
Run Code Online (Sandbox Code Playgroud)