2009-11-12 140 views
1

我目前有一個DirectShow.NET圖表可以正常播放,但我希望它也能夠反向播放(從最後開始,向後播放到開始)。directshow反向播放

我試着玩IMediaSeeking :: SetRate(雙)方法,但只適用於正值。當我嘗試使用負值時,它會崩潰。

幫助!

我正在使用.avi視頻文件,但會打開嘗試不同的格式,如果這可以做到這一點。

回答

6

實際上,即使格式不使用時間壓縮,我也不確定股票AVI demux是否支持任何格式的負面利率。當然,大多數其他多路分離器濾波器不會支持負向速率。所以你可能需要一個自定義的demux過濾器來做到這一點。如果你這樣做,確保你使用索引容器格式(例如mp4)。

如果您使用沒有時間壓縮的格式(動態JPEG,i-幀僅mpeg-2等),您將支付相當大的幀壓縮價格,以便能夠反向播放。如果你想做得很好,可以考慮一些DVD實現的方法。他們中的一些人通過僅播放i幀來反向播放,所以你有1或2fps。但是高端實現將解碼整個GOP(約15幀),然後在解碼先前的GOP的同時以相反的順序渲染這些幀。這在開發和系統資源方面都很昂貴,但是卻取得了很好的結果。

2

您是否嘗試過使用各種視頻文件?由於temporal compression techniques(即,幀中的信息取決於先前幀中的信息),所以許多文件只能向前播放。

你可以使用GSpot檢查你的文件,看它是否包含任何P幀;如果是這樣,你不可能反向播放它。 AVI是一個容器,它內部的視頻可以使用任何編解碼器。

+0

你推薦任何可以反向播放的編解碼器嗎? – mwahab 2009-11-13 17:50:54

+0

我不知道 - 這個鏈接暗示了Indeo 5編解碼器(http://vvvv.org/tiki-index.php?page=FAQ+Codecs#Reverse_Playing),但質量很差。您可以看到您是否可以找到Motion JPEG編解碼器,因爲它們幾乎都是JPEG幀的序列,或者如果可以在DirectShow中播放它,請嘗試使用Quicktime RLE。 – GraemeF 2009-11-13 19:20:50

1

一邊喊IMediaSeeking :: SetPositions同時向後一幀圖像framestep會給你退播放。這將是不太可能流暢,但我認爲這將是最好的,你可以在不編寫多個自定義過濾器的情況下實現。

使用沒有像mjpeg或jpeg2000這樣的任何時間壓縮的編解碼器將對此技術有很大的幫助。對於普通的現代編解碼器來說,降低分辨率和比特率會有所幫助

您是否需要能夠隨時隨地反轉播放任意文件?如果您可以預處理您的媒體文件,則準備可切換到的反轉版本並不困難。 Avisynth可以做到這一點,如果你對低級工具感到滿意。

+0

我一直在用SetPositions向後退步,並得到不如預期的好結果。 最後,我只是要預處理文件以創建一個可以在運行時切換到的反轉版本。謝謝! – mwahab 2009-11-20 17:22:08