- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 QMediaPlayer
创建一个..媒体播放器。我希望能够在按下按钮时倒带视频。
但是通过 QMediaPlayer.setPlaybackRate
设置负的 playbackRate
似乎不会让视频倒带。它只是继续向前播放。
我不想更改视频的位置,我希望视频以负速度播放。根据我的一些逻辑,将 playbackRate
设置为负值将使视频反向播放。但这并没有发生。如果你看不懂我的话,这里是video回放应该是什么样子。
这里是重现问题的一些准系统代码:
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)
我尝试寻找解决方案,但除了 documentation 之外什么也没有得到说(强调我的):
Values less than zero can be set and indicate the media will rewind at the multiplier of the standard pace.
但是,我没有看到这种效果。
我确实注意到了这一点:
Not all playback services support change of the playback rate.
我可能无法倒带 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)
关于python - QMediaPlayer negative playbackRate 不倒回视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52155722/
我想获取小部件应用程序的屏幕截图,然后使用 setMedia() 将其原始数据缓冲区设置为 QMeidaPlayer。到目前为止我所做的是接收图像,保存它,然后从中读取。但是,我想问你如何直接读取原始
问题:以下调用不会让 QMediaPlayer 播放任何声音。 player->setMedia(QUrl("qrc:/snd/coin-refund.mp3")); player->play();
我正在尝试实现一个检查视频文件的服务器终端应用程序。我需要获取音频/视频编解码器、分辨率、比特率、长度等信息。 我在 QMediaResource 中找到了大部分需要的信息.在阅读了多个示例之后,我得
我想知道为什么 QMediaPlayer 不是从另一个线程播放,而是在调用者线程停止时开始播放。 例如: 线程 A 调用(调用由信号槽完成)到线程 B 开始播放 MP3,但线程 A 继续他的工作,但是
我创建了一个默认的 Qt GUI 应用程序,我在主窗口类中添加了 void keyPressEvent(QKeyEvent* ev);,当用户按下空格时,应用程序将播放声音 (ok) 但是当用户在短时
我正在研究创建简单视频播放器的选项。我想做的是在播放视频时应用一些音频处理(例如,为简单起见,使用低通滤波器)。我看过 Qt 多媒体 API,所以这是我的主要问题: 如何编辑 QMediaPlayer
我刚开始使用 C++,我正在尝试使用 Qt 播放 mp3 文件。我写了这段代码,但由于某种原因它不起作用。我在互联网上进行了搜索,但找不到任何有用的东西。 这是我的代码: #include #inc
我是 Qt 的新手。我在使用 QMediaPlayer 时遇到问题:我的程序有 2 种形式(主形式和通知形式)。所以它有条件,如果它是真的,程序必须显示第二种形式并在加载形式上播放音乐。 主要.cpp
您好,我仍在为今年学校的主要项目学习 C++ 和 QT,我希望在 C++ 的一些语法和使用某些 QT 函数方面得到一些帮助。在制作媒体管理器时,我设法通过按下表单中的按钮来播放歌曲。现在我想通过按另一
我在 Windows 8 Pro x64 上使用 Qt Creator 2.7.2 (Qt 5.1)。我在使用 QMediaPlayer 时遇到问题。我的 PC 上有一些 MP3 文件在 Window
我试图弄清楚 Qt 中的 QMediaPlayer 支持什么,但找不到特定的格式列表(MP3、AAC、FLAC、MIDI 等)。 最佳答案 QtMultimedia 中有几个可用的后端。例如,QtMu
我正在尝试在我的应用程序中设置 QVideoWidget,但没有音频/视频。这就是我创建相关对象的方式: m_player = new QMediaPlayer; m_playlist = new Q
我正在使用 Qmediaplayer 开发视频播放器。当我设置一个标签来显示视频的持续时间时,它显示了错误的值。 float duration = mediaPlayer.duration() / 1
我正在使用 QMediaPlayer 播放音频并且想要可视化音频电平(例如在 this video 中)。 我已经从 Qt 4 文档中找到了一个示例,但是他们手动生成了信号,我发现无法使用 QMedi
我正在使用 qt5.0。我创建了 dll 并将我所有的音频文件放在 dll 中。现在我正在从资源创建文件并播放。它工作正常。 但问题是播放文件后,我无法删除该文件并重新创建新文件。 如果我尝试手动删除
我正在尝试在 QMediaPlayer 的视频结束后执行某种操作/操作。我知道您可以检查播放器 player->state() 的状态,并且有一个“已停止”状态。但我想知道如何将这种状态与某个 Act
我想从 QMediaPlayer 中保存帧的图像.阅读文档后,我明白我应该使用 QVideoProbe .我正在使用以下代码: QMediaPlayer *player = new QMediaPla
如何使用 K-Lite Codec Pack 工具 DirectVobSub 禁用 QMediaPlayer 自动加载字幕?如果字幕文件位于视频文件的同一目录中,我不想在 QMediaPlayer 中
我知道 C++ 不支持 QMultimediaWidgets。我也在为 Android 开发 native 应用程序。因为我不使用 QML,所以我需要一种在应用程序中播放视频的方法。我想使用 QMed
这似乎太简单了,我一定是忽略了什么? 如何从 QMediaPlayer 显示的视频文件中找到原始视频大小或纵横比? 视频Resolution,PixelAspectRatio等,应该在MetaData
我是一名优秀的程序员,十分优秀!