Python PyQt QMediaPlayer使用部分(并非全部)视频文件前帧

Python PyQt QMediaPlayer使用部分(并非全部)视频文件前帧,python,pyqt,frame,smoothing,qmediaplayer,Python,Pyqt,Frame,Smoothing,Qmediaplayer,我在Wndows平台上使用PyQt QMediaPlayer创建的自定义视频播放器中遇到了视频逐帧移动问题。我希望视频向前或向后推进一帧,然后在我单击按钮时暂停 视频可以来自各种摄像机,包括SD、HD和4K。一些视频帧向前或向后,没有任何问题。然而,我有两个不同摄像机的视频,当向前或向后取景时,视频会结巴。一台摄像机的视频文件扩展名为.MOD,另一台摄像机的文件扩展名为.MTS。当向前或向后分幅14-16帧时,这些视频保持暂停,然后视频跳转到当前帧,我假设这是一个关键帧 我的QMediaPlay

我在Wndows平台上使用PyQt QMediaPlayer创建的自定义视频播放器中遇到了视频逐帧移动问题。我希望视频向前或向后推进一帧,然后在我单击按钮时暂停

视频可以来自各种摄像机,包括SD、HD和4K。一些视频帧向前或向后,没有任何问题。然而,我有两个不同摄像机的视频,当向前或向后取景时,视频会结巴。一台摄像机的视频文件扩展名为.MOD,另一台摄像机的文件扩展名为.MTS。当向前或向后分幅14-16帧时,这些视频保持暂停,然后视频跳转到当前帧,我假设这是一个关键帧

我的QMediaPlayer和VLC Codec信息实例中的getMetaData方法为这两个视频中的编解码器提供了稍微不同的值。Herename是以下两种代码的编码值:

文件扩展名 QMediaPlayer VLC 摩登派青年 MPEG-2视频 MPEG-1/2视频(mpgv) .MTS 未知编解码器 MPEG-4 AVC(第10部分)(h264)
并非所有视频格式都支持逐帧向后(实际上,由于压缩的工作方式,大多数不支持)。从理论上讲,这个问题不应该存在,但这取决于编解码器和播放器API的实际实现方式。在这两种情况下,恐怕都没有一个直接的解决方案(特别是,没有一个涉及到播放/暂停技巧的解决方案,即使是逐帧转发),并且您可能需要实现某种级别的内部缓冲,这显然会影响性能,因为它将部分在python抽象级别上完成。这听起来不太好。我第一次使用OpenCV编写播放器,效果很好,我没有缓冲帧捕获。我猜前向和后向取景效果不错,因为OpenCV会将每个帧转换为Numpy数组。但是OpenCV播放器不能在秒/帧内处理4K视频,因此运行缓慢。QMediaPlayer可以毫无问题地播放4K视频。有其他解决方案的想法吗?老实说,我不确定,4k播放要求很高,而且由于python的性质,使用它可能不是一个好的解决方案。阅读你的另一个问题,一个很大的瓶颈可能是从QImage到最终QLabel的通道,这不是一个真正的OpenCV问题。我唯一能想到的解决方案是避免调整大小,并在标签上设置PIXMAP,并在QGoice场景上使用QGrimeCpIXMpItIt,这将几乎在C++侧留下所有的缩放/转换。但这只是一种预感,我只想把它作为一个实验来尝试,但不抱太多希望。还有,看看。也许您可以创建一个线程安全缓存,并在需要逐帧播放时在标准QMediaPlayer播放和缓存查看之间切换。谢谢。我会在周末尝试这两种方法,然后回来汇报。我真的很欣赏这些想法。