我想要使用DirectShow的媒體文件的幀速率。DirectShow返回錯誤幀速率FPS
目前,我用下面的方法,在某些情況下,似乎不準確:
我添加SourceFilter
我的圖表,枚舉它的腳,然後再打一個pPin->ConnectionMediaType(&compressedMediaFormat)
進出從中提取AvgTimePerFrame
。據我瞭解,每幀的平均時間以100納秒錶示。所以,我只分割10,000,000/AvgTimePerFrame來獲得文件的平均FPS。
對於所有幀具有幾乎相同幀時間的媒體文件,我得到正確的FPS。但對於那些對不同幀有不同幀時間的幀,此方法返回非常不準確的結果。
正確的方法是獲取文件的持續時間和幀數,並計算出平均FPS(frameCount/duration)。然而,這是一個代價高昂的操作,因爲計算確切的幀數需要通過整個文件。
我不知道是否有辦法更準確地獲得幀頻信息?
我完全同意這個解決方案,但我想知道是否有一種方法來提取可用的元信息。例如,當您右鍵單擊該文件並選擇屬性和詳細信息時,它會告訴您幀速率。我懷疑它使用了這種搜索技術,因爲即使打開一個大小爲幾GB的文件也不會花時間。即使有些不準確,我希望在細節部分顯示該值。因此,我在DirectShow中尋找媒體基金會的一個替代媒介'IMFMediaType - >> GetUINT32(MF_MT_AVG_BITRATE)' – mbaros
另一種替代方法是您在問題中提到的來自媒體typem的'AvgTimePerFrame'值。這是一個直接的等價物。但請注意,DirectShow和Media Foundation解析器可以不同方式提取元數據,在某些情況下,提取的值可能會有所不同。 –
這正是我發生的事情。對於某些媒體文件媒體基礎和右鍵單擊屬性 - >詳細顯示8 FPS,同時計算它'AvgTimePerFrame'結束24 FPS。 – mbaros