以编程方式向前和向后播放高fps视频的最佳方式是什么?

时间:2017-03-24 12:00:35

标签: java video vlcj

我需要通过一个设置播放速度和方向的滑块,以编程方式向前和向后播放视频;大约150-400 fps。在视觉上,它会像:

[-10x][-8x][-4x][-2x][1/8x][1/4x][1/2x][1x][2x][4x][6x][8x][10x]

慢慢地在这些之间转换。

我尝试过的事情:

  1. JavaFX媒体播放器:

    • 24fps视频,转发:适用于正常播放
    • 24fps视频,向后:我尝试使用seek()方法,但它滞后并且不允许我设置毫秒,因为它将值转换为秒以后并且丢失实际值。
  2. vlcj player:

    • 24fps视频,转发:1x到10x播放速率正常工作,当然我看到帧在/ 2x,/ 4x等处变化。
    • 24fps视频,向后:我尝试使用setTime()方法,这似乎工作正常,暂停视频并每1ms从当前时间减少1ms。但它当然是滞后的。即使是50ms和100ms。
    • 400fps视频,前进:从1x到10x的所有速度都显着滞后;但是/ 2x和更低的速率效果很好。
    • 400fps视频,向后:无法通过减少1ms来使其工作方式相同,但它通过每20ms减少20ms而顺利工作。不幸的是,没有慢动作可以实现,它播放速度非常快。
  3. 通常的VLC媒体播放器:

    • 400fps视频,转发:视频仍然落后于1倍,并且在1 / 2x及以下播放流畅。在搜索栏下方的播放器内部,我可以看到一个加载进度条,正如我想的那样,它无法以1倍400 fps的视频播放,因为它需要处理太多的帧。并且最有可能的是,为了让它以这种方式工作,需要一台功能强大的机器(但这似乎是浪费电力)。
  4. 现在我只能想到以下解决方案:

    1. 准备前后两张视频,将它们放在彼此之上,始终进行前置播放,并保持同步如下:

      backwardVideo.time = backwardVideo.totalLength - forwardVideo.time;

      当向前播放时,我只会显示前进的视频;然后在向后播放时,我会隐藏顶层的前向视频,并让后面的视频看起来像是向后播放。然后我就解决了高fps视频的快速播放问题,因此它不会以更高的速率延迟。

    2. 通过根据fps和计算机电源处理带缓冲区的文件中的帧来执行此操作。这就像mjpeg播放器,它会加载文件夹中的所有照片。

      根据建议here我强烈建议您将帧保存到文件

      因此,对于300秒的90秒视频,它只有27000张照片(对于具有快速磁盘读取速度的强大电脑来说,这并不是什么大不了的事)。

    3. 编码的视频不会减去帧差异,并使用带缓冲区的帧来播放它们(它应该非常慢,如建议的here

    4. 注意:

      • 我将使用一台PC:i7第6代,GTX980 4Gb显卡,16GB内存。
      • 视频长约90秒,分辨率约为2k。
      • 我更喜欢java的解决方案,但如果在任何其他技术中都有一个很好的解决方案,那么我就是为了它。

      那么,您认为以高fps视频顺畅播放前进的最佳方式是什么?

0 个答案:

没有答案