我目前有一个正确播放的DirectShow.NET图表,但我希望它能够反向播放(从最后开始并向后播放到开头)。
我尝试过使用IMediaSeeking :: SetRate(double)方法,但这只适用于正值。当我尝试使用负值时,它会崩溃。
帮助!
我正在使用.avi视频文件,但如果能够解决这个问题,可以尝试不同的格式。
答案 0 :(得分:6)
实际上,我不确定股票AVI demux是否支持任何格式的负利率,即使格式不使用时间压缩。当然,大多数其他demux过滤器都不支持负利率。因此,您可能需要一个自定义demux过滤器来执行此操作。如果这样做,请确保使用带索引的容器格式(例如mp4)。
如果你使用没有时间压缩的格式(运动jpeg,i帧只有mpeg-2等),你将在帧压缩中付出相当大的代价,以便能够反向播放。如果你想做得很好,请考虑一些DVD实现的方法。其中一些只通过播放i-frame而反向播放,因此你有1或2 fps。但是顶端实现将解码整个GOP(大约15帧),然后在解码前一个GOP时以相反的顺序渲染这些帧。这在开发方面和系统资源方面都很昂贵,但却取得了良好的最终结果。
答案 1 :(得分:2)
你试过各种视频文件吗?由于temporal compression techniques,许多文件只能向前播放(即帧中的信息取决于前一帧中的信息)。
您可以使用GSpot检查文件,看看它是否包含任何P帧;如果是的话,你不太可能反过来玩。 AVI是一个容器,其中的视频可以使用任何编解码器。
答案 2 :(得分:1)
反复调用IMediaSeeking :: SetPositions一次向后移动一帧帧将给你反向播放。它不太可能流畅,但我认为如果不编写多个自定义过滤器,它将是最好的。
使用没有任何时间压缩的编解码器(如mjpeg或jpeg2000)对这种技术有很大帮助。对于常规的现代编解码器,降低分辨率和比特率会有所帮助。
您是否需要能够随时为任意文件反向播放?如果您可以预处理媒体文件,那么准备可以切换到的反转版本并不困难。如果你对低级工具感到满意,Avisynth可以做到这一点。