Capturing Max window to video example
BlitzMax Forums/BlitzMax Programming/Capturing Max window to video example
| ||
Hi. Just a quick update on what I'm working on. You can give it a window handle, and then just dump it to an AVI using most installed codecs. Output example here: http://www.furi.dk/files/AVIWriteTest.avi (714k/Intel Indeo 5 codec so all can use it) ' Include AVITool Include "AVITool.bmx" ' Create AVI Writer class Global AVIWriter:TAVIWriter = New TAVIWriter ' Never forget this one If (Not AVITool_Init()) Notify("Failed to init AVITool! See debug log for more info.") Return End If ' Setup windowed graphics Graphics 640,480 ' HWND comes from DirectX. TODO: Fix to work in GL mode too. Local hWnd:Int = Primarydevice.hwnd ' Init AVI writer If (Not AVIWriter.Open("test.avi", 640, 480, 60, hWnd)) Notify("Failed to open file for writing!") Return End If ' Loop until escape, recording every step of the way While(Not KeyHit(KEY_ESCAPE)) ' Random square color SetColor(Rand(0,255), Rand(0,255), Rand(0,255)) ' Random square DrawRect(Rand(0, 640), Rand(0, 480),10,10) ' Set white color for text SetColor(255,255,255) ' Draw text DrawText("Hello this!", Rand(0, 640), Rand(0, 480)) ' Update screen Flip() ' Write to AVI AVIWriter.WriteFrame() Wend ' Close AVI writer. Never forget this or file will be corrupt. AVIWriter.Close() |
| ||
This looks intresting. How dose it effect performance of the app running? i.e. how fast is it? |
| ||
Depends on how heavy your app is. Most Max2D apps should run without delay. I added AVI reading too btw: ' Include AVITool Include "AVITool.bmx" ' Create AVI Reader class Global AVIReader:TAVIReader = New TAVIReader ' Never forget this one If (Not AVITool_Init()) Notify("Failed to init AVITool! See debug log for more info.") Return End If ' Setup windowed graphics Graphics 640,480 ' Init AVI reader and store number of frames Global numFrames:Int = AVIReader.Open("test.avi", 640, 480) If (numFrames = 0) Notify("Init error!") Return End If ' Keep track of current frame Global curFrame:Int = 0 ' Loop until escape is pressed While(Not KeyHit(KEY_ESCAPE)) ' Clear screen Cls ' Read frame Local frame:Byte Ptr = AVIReader.ReadFrame(curFrame) ' Bump frame count curFrame:+1 ' Beyond numframes? If so, reset If (curFrame > numFrames) curFrame = 0 End If ' Use software render AVIReader.DrawSoftware(frame) ' Update screen Flip() Wend ' Close AVI reader AVIReader.Close() |
| ||
Well, it requires a CODEC that you need to purchase. Is there a way to user an older version of Indeo or another codec? What about NO Codec? Would be nice if the Codec was selectable. |
| ||
What? The Indeo codec comes free with Windows. Always been this way. Choosing no codec is possible, although it just dumps a video full of uncompressed BMP frames which takes up a whole lotta space ;) |
| ||
Arcadenut: Download the AVIWriteTest.avi and playit not click and play :) |
| ||
Aaah!!! Arcadenut: Download the AVIWriteTest.avi and playit not click and play :) Alienforce: Cheers - I can see it now! |
| ||
Well, if I try to play the sample posted here, it pops up and tells me that I don't have the required CODEC (Running WinXP Pro SP2) and it points me to the Indeo web site where I can purchase the CODEC for $15. What am I missing? (besides the CODEC <G>) |
| ||
Seems handy. On the Mac, what I usually do is just grab and save off each frame to a file, either RAW or PNG, then use a free program GQConvert() to turn it into either a quicktime or avi or other file. |
| ||
I'm on Windows XP here too and have the indeo codec. Did you install media player as it usually contains the most used codecs. I mean, who wan't to pay 15 bucks for some old obsolete codec? ;) |