2013-01-21 105 views
0

我試圖捕獲一個AVI視頻,使用DirectShow AVIMuxFileWriter過濾器。 當我連接SampleGrabber過濾器而不是AVIMux時,我可以清楚地看到數據流是30 fps,但是在捕獲視頻時,每個幀都重複4次,我得到120幀而不是30幀。電影慢了4倍比它應該是,並且只有一組中的第一幀是一個關鍵幀。 我嘗試了8 fps的相同實驗,對於我收到的每個圖像,我在視頻中有15幀。而在15 fps的情況下,我得到了每幀8次。用DirectShow捕獲AVI視頻

我試着用C++編寫代碼並用Graph Edit Plus進行測試。 有什麼辦法可以控制它嗎?可能對AVIMux過濾器有些限制?

回答

0

您沒有指定可能對問題有影響的捕獲格式,但通常聽起來像圖形寫入文件時有一些瓶頸,阻止了流以30fps的速度繼續流動。相機正在嘗試以30fps的速度製作相框,只要緩衝區被回收填充,相機就會這樣做。

但是,這裏緩衝區不可用,因爲文件寫入器正忙於將它們放到磁盤上。捕捉過濾器不足,在這種情況下,它會增加與每個捕捉幀一起傳播的「丟幀」計數器。 AVIMux使用這個計數器在AVI文件中插入一個指示符,它實際上表示「一幀應該在這裏可用來寫入文件,但不是;在播放時重複最後一幀」。所以文件應該有每秒30幀的佔位符 - 一些填充了實際的幀,一些「丟幀」。

此外,您沒有提及您是否在音頻中混音,這將作爲圖形的參考時鐘以維持音頻 - 視頻同步。如果還使用音頻流捕獲完成,則AVIMux會更改視頻流的幀率,以使兩個流的持續時間相等。您可以通過轉儲AVI文件頭來檢查AVIMux是否改變了視頻流的幀率(或者右鍵單擊資源管理器中的文件並查看屬性)。

如果讓我大膽地猜測到問題的根源,我打賭捕獲驅動程序在計算丟棄幀計數這又搞亂了AVIMux的錯誤。這是否發生在不同的相機?