1

我想要比實時更快地提取和分析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幀,更快地獲取幀?

回答

1

沒有一種更有效的方法來獲得每第n幀。您可以將位置設置爲每第n幀,但搜索算法會搜索最近的前一個關鍵幀,然後從那裏進行解碼。正因爲如此,您可能會通過設置位置來解碼更多幀。所以你可以通過幀步驟節省時間解碼每一幀。使用MediaPlayer尋找關鍵幀沒有簡單的方法。您需要解析h.264文件以獲取關鍵幀距離,然後您可以將該位置設置爲該節奏。