2017-04-24 93 views
2

我正在使用實時錄像機,但是當我錄製視頻時,視頻的大小真的很大!這就像50MBps。 進出口使用庫DirectXDirectShowLib更好的壓縮使用DirextX.Filters.VideoCompressor

我用下面的VideoCompressor

capture.VideoCompressor = Filters.VideoCompressors(0) 

不是視頻就像是5Mbps的,但是這仍然是非常巨大的!

該索引上的Compressor的名稱是DV Video Encoder。 這裏是視頻編碼器的列表,從0

DV Video Encoder 
ffdshow video encoder 
MJPEG Compressor 
MSScreen 9 encoder DMO 
UtVideo Pro YUV422 10bit DMO 
UtVideo RGB DMO 
UtVideo RGBA DMO 
UtVideo YUV420 BT.601 DMO 
UtVideo YUV420 BT.709 DMO 
UtVideo YUV422 BT.601 DMO 
UtVideo YUV422 BT.709 DMO 
WMVideo8 Encoder DMO 
WMVideo9 Encoder DMO 

開始但不幸的是DV視頻編碼器爲0的指數僅與上面的代碼工作,否則如果我改變Filers.VideoCompressors(1),這是ffdshow的視頻編碼器,它會給我一個錯誤

Error HRESULT E_FAIL has been returned from a call to a COMP component. 

有效地壓縮它的任何機會呢?或者我應該使用ffmpeg?如果是這樣,那麼我怎麼能壓縮ffmpeg與視頻運行?

謝謝。

回答

0

我想提到的第一件事情是ffdshow視頻編碼器本質上是一種用於直接顯示的ffmpeg。然而,它需要額外的配置(如選擇一個可用的編解碼器並對其進行配置),我不確定是否有可能(或合理)通過vb.net API使用它(如果我沒有記錯的話,它是相當有限的)。 UtVideo YUV422 BT.601和UtVideo YUV422 BT.709將是SD和高清視頻編碼的不錯選擇。它們速度相當快,製作出合理壓縮的無損視頻,稍後可以使用慢速但高壓縮編解碼器(如h264或h265)進行壓縮。您可以使用ffmpeg以及does support direct show sources as inputs

0

在大多數情況下,您希望使用某些特定的視頻編碼,尤其是H.264或Windows Media Video,因爲這規定了進一步的集成選項(特定文件格式或流式傳輸集成等)。然後你使用你認爲對你有用的特定編解碼器(足夠快或者有特定的編碼選項,這些是強制性的)。也就是說,Filters.VideoCompressors集合並不完全是你選擇的豐富集合,而是一個訪問者來選擇你已經知道和尋找的編解碼器。

不幸的是,DirectShow股票編解碼器產品並不好。這是有原因的,包括DirectShow本身比大多數流行的編解碼器都要舊,然後阻止許可問題從一開始就使好的編解碼器可用。後來,DirectShow已經處於退休年齡,H.264編碼器僅通過更新的API提供。

所以你的腳步這裏有如下(假設你用DirectShowLib住):

  1. 瞭解編碼您要使用
  2. 如果你想留在股票編碼器什麼視頻,你可能的選擇是WMVideo9編碼器DMO和Windows媒體視頻一般
  3. 否則,您需要確定您感興趣的編解碼器,H.264編解碼器作爲一個可能的選擇,瞭解如何才能使其可通過DirectShow的
  4. 使用收集找到您感興趣的編解碼器,每個上面寫的,從那裏實例化的編解碼器,並在您的DirectShow管道