2012-12-27 58 views
2

我希望能夠使用OpenGL創建視頻輸出文件,而不是屏幕輸出中的通常顯示。我想通過不使用glutPostRedisplay()或(SFML版本,這是這樣的:) window.Display(),並以某種方式使用glReadPixels()來代替。OpenGL - 創建視頻輸出文件

glReadPixels使像素內容到內存中的數組(正如你可能已經知道了),但我怎麼可以轉換成一個框架,並串幾幀一起在一個視頻文件?視頻文件的格式是什麼,以便我可以播放它?

我應該解釋爲什麼我想這樣做:很多物理模擬的可能需要很長的時間來計算足夠的信息來顯示一幀,所以最好是離開它運行過夜,播放視頻文件,第二天早上。你不會想每五分鐘回來一次,看看發生了什麼。

+0

您可以將其存儲在原始幀(RGBA)中,並稍後處理它。與gstreamer。 (這也允許將轉換管道嵌入到應用程序中)。 –

+0

所以gstreamer是我可以在我的代碼中包含的東西,並傳遞一些原始幀,我會得到一個ogg或mpeg或輸出? – user3728501

+0

或多或少。它是一個完整的框架,因此對於一個應用程序至少可以看起來很臃腫;但是如果你已經知道例如。 unix風格的管道和過濾器,沒有太多的學習曲線。 –

回答

4

glutPostRedisplay是具體的過剩和不是OpenGL的一部分。

你通常做的屏幕外着色使用一個p緩衝器或使用隱藏的窗口和幀緩衝區對象。

將圖像轉換爲視頻可以通過各種方式完成。例如,您可以使用FFmpeg使用image2pipe作爲輸入格式,並將原始圖像數據寫入ffmpeg過程標準輸入。一個更簡單的方案是將每個幀轉儲到單獨的圖像文件中。使用libpng很簡單。然後,您可以將各個圖像合併爲一個視頻。

但是,當進行物理模擬時,您不應該將最終渲染轉儲到文件中。相反,您應該存儲模擬數據以供以後播放,因爲您可以調整渲染參數而無需重新模擬所有內容。你將不得不對渲染器進行調整!

+0

這是一個好主意,存儲數據,謝謝。 – user3728501