2013-01-21 46 views
3

我有一個視頻分析程序,處理視頻中的各種幀。 (幾個小時) 視頻很可能是MP4,但可能會有其他格式向前。更快的幀提取比ffmpeg

目前,我有一個C#包裝繞ffmpeg調用提取一個單獨的幀在請求的時間。 (我正在使用ffmpeg.exe二進制文件,不直接使用庫) 目前,這一切都有效。但速度很慢。非常慢。

我已經找到了方法來提高速度,通過將提取的幀存儲在虛擬硬盤中進行處理。更改存儲的圖像格式等...

我只是想檢查是否有人可以想出任何方式來拉出個別幀。以分秒的準確度。 我知道這可能與DShow等...我直接去FFMPEG,因爲我以前使用它。但是如果DShow可能會更快,我會很樂意改變!

+0

您應該將其標記爲「.net」而不是「c#」,因爲任何.NET庫都可以爲您工作(問題不是語言特定的)。 –

+0

我建議在尋找更快的方法之前直接引用這些庫,只是因爲每次啓動一個新進程爲您工作時都會有開銷。 – Bobson

+0

@Ben Ford,你最終做了什麼?我對DirectShow.net沒有太大的好運,FFMPEG仍然是讀取任何視頻文件最可靠的方式。 – Justas

回答

1

在Windows中,有原生API來處理,並在從媒體文件具體讀取:

  • 的DirectShow
  • 媒體基金會

兩者都提供了支持MP4(H.264視頻),DirectShow作爲由第三方MP4解複用器和H.264解碼器(需要的,也是Windows 7提供的構建它)擴展的框架,以及Media Foundation - 根據OS版本本地或通過第三方擴展進行擴展。

兩者都可以分別通過開源包裝器DirectShow.NET和Media Foundation .NET從.NET接口。這對於單個幀而言運行速度更快,然後是FFmpeg CLI 方式。另外請注意,您將能夠逐步獲取幀,而無需查找特定時間並執行過多的重複工作,甚至不需要提及進程啓動/初始化開銷。或者,您可以使用FFmpeg/Libav二進制文件通過封裝到C#中並獲得類似的性能。

0

您可以更改偏移參數的位置。如果視頻包含有效的元數據,您可以通過視頻更快地查找,那麼順序對速度很重要。

如果在輸入文件之前放置偏移量,偏移量將以比特率計算,而不是每次都精確(在可變比特率的情況下),但速度要快得多。正確的方法是瀏覽視頻(offset參數在輸入文件之後),但這需要時間。

+0

我已經按照正確的順序得到了參數。這不是問題。 –

相關問題