我需要通过一个设置播放速度和方向的滑块,以编程方式向前和向后播放视频;大约150-400 fps。在视觉上,它会像:
[-10x][-8x][-4x][-2x][1/8x][1/4x][1/2x][1x][2x][4x][6x][8x][10x]
慢慢地在这些之间转换。
我尝试过的事情:
JavaFX媒体播放器:
seek()
方法,但它滞后并且不允许我设置毫秒,因为它将值转换为秒以后并且丢失实际值。 vlcj player:
setTime()
方法,这似乎工作正常,暂停视频并每1ms从当前时间减少1ms。但它当然是滞后的。即使是50ms和100ms。 通常的VLC媒体播放器:
现在我只能想到以下解决方案:
准备前后两张视频,将它们放在彼此之上,始终进行前置播放,并保持同步如下:
backwardVideo.time = backwardVideo.totalLength - forwardVideo.time;
当向前播放时,我只会显示前进的视频;然后在向后播放时,我会隐藏顶层的前向视频,并让后面的视频看起来像是向后播放。然后我就解决了高fps视频的快速播放问题,因此它不会以更高的速率延迟。
通过根据fps和计算机电源处理带缓冲区的文件中的帧来执行此操作。这就像mjpeg播放器,它会加载文件夹中的所有照片。
根据建议here:我强烈建议您将帧保存到文件。
因此,对于300秒的90秒视频,它只有27000张照片(对于具有快速磁盘读取速度的强大电脑来说,这并不是什么大不了的事)。
编码的视频不会减去帧差异,并使用带缓冲区的帧来播放它们(它应该非常慢,如建议的here)
注意:
那么,您认为以高fps视频顺畅播放前进的最佳方式是什么?