从UWP上的mp4文件中快速提取帧

从UWP上的mp4文件中快速提取帧

问题描述:

我想要比实时更快地提取和分析mp4文件,因为我不需要每一帧。从UWP上的mp4文件中快速提取帧

我曾尝试以下操作:

composition.GetThumbnailAsync(TimeSpan.FromSeconds(i),160,90,VideoFramePrecision.NearestKeyFrame); 

这给了我任何处理之前1fps。

mediaPlayer.PlaybackSession.PlaybackRate = x; 

其中x对于每个视频的工作方式不同;有时会播放平滑的60fps播放到x = 2,但在其他方面会导致1 fps。

最好的结果与 的MediaPlayer在mediaPlayer_VideoFrameAvailable

这将确保所有的下一帧设置mediaPlayer.IsVideoFrameServerEnabled = true;mediaPlayer.StepForwardOneFrame();其实是各做一个赶到后(所以最好还是根据文件更糟),但仍然是浪费我获取每一帧的资源,并且需要每个>第五帧。

我认为这一切都与视频中的关键帧或“I”帧有关,但我没有看到有办法只获得这些帧。

任何想法,一次跳过n帧,更快地获取帧?

没有一种更有效的方法来获得每第n帧。您可以将位置设置为每第n帧,但搜索算法会搜索最近的前一个关键帧,然后从那里进行解码。正因为如此,您可能会通过设置位置来解码更多帧。所以你可以通过帧步骤节省时间解码每一帧。使用MediaPlayer寻找关键帧没有简单的方法。您需要解析h.264文件以获取关键帧距离,然后您可以将该位置设置为该节奏。