2011-02-08 15 views
6

Ho un programma C che esegue una simulazione scientifica e visualizza una visualizzazione in una finestra OpenGL. Voglio rendere questa visualizzazione un video, che alla fine andrà su YouTube.Produrre video dal programma OpenGL C

Domanda: Qual è il modo migliore per creare un video da un programma C/OpenGL?

Il modo in cui l'ho fatto in passato è utilizzare un programma di cattura dello schermo, ma questo è molto laborioso (è necessario avviare/arrestare il programma di cattura dello schermo, salvare il file video, ecc ...) . Sembra che ci dovrebbe essere un modo per automatizzare il processo di creazione di un video all'interno del programma C. Quindi posso lasciarlo in esecuzione durante la notte e avere 20 video da guardare al mattino, e scegliere il migliore da mettere su YouTube.

YouTube recommend "Formato MPEG4 (Divx, Xvid) a risoluzione 640x480".

Sto usando GLUT 3.7.6_3, se questo fa la differenza. Posso cambiare il sistema di finestre se c'è una buona ragione.

Sono in esecuzione Windows (XP), quindi preferirei risposte che funzionano su Windows, ma anche le risposte Linux sono ok. Posso usare Linux se non è possibile fare facilmente le cose video su Windows. Ho un amico che crea un'immagine .png per ogni fotogramma del video e poi li ricuce insieme usando "mencoder" su Linux.

+1

Il salvataggio di singoli fotogrammi e la conversione in video in uno strumento esterno (probabilmente Mencoder è una buona ipotesi) mi sembra la soluzione migliore. –

+0

visualizza una discussione più ampia sull'argomento qui: http://stackoverflow.com/questions/154730/capturing-video-out-of-an-opengl-window-in-windows – dm76

+0

@DavidM: Grazie mille, è davvero utile. –

risposta

8

è possibile utilizzare la funzione di glReadPixels (vedi example)

Ma se le cose che si sta tentando di visualizzare è fatto di oggetti semplici (ad esempio sfere, aste, ecc ..), lo farei "esportazione" ogni fotogramma in un file POV-ray, esegui il rendering e quindi crea un video da queste immagini. raggiungerai una qualità molto più elevata del genere.

+0

Non che ciò sia troppo importante per questa particolare istanza, ma l'utilizzo dei PBO è più efficiente di glReadPixels() poiché i PBO consentono il DMA. –

1

Utilizzare un'applicazione di terze parti come FRAPS per fare il lavoro per voi.

Fraps possono acquisire audio e video fino a 2560x1600 con frame rate personalizzate da 1 a 120 fotogrammi al secondo!

Tutti i filmati sono registrati nella straordinaria qualità .

Hanno campioni video sul sito. Sembrano buoni

EDIT:

Si potrebbe eseguire uno strumento per registrare lo schermo dall'applicazione C chiamandola come system("C:\screen_recorder_app.exe -params"). Controlla camstudio, ha una versione da riga di comando.

+0

Grazie, ma questo sembra essere solo un normale programma di cattura dello schermo. Puoi eseguire questo da un programma C? –

+0

@Adam Aggiornamento risposta. – karlphillip

Problemi correlati