How to Record High Quality Video of Your Game using a Slow Computer
Comments
Programmer time is expensive. Why would you ever want to spend programmer time developing a solution to a problem which has already been solved dozens of times with existing software? Got a slow computer? Get a faster one. Most game developers have/should have great hardware. Hardware doesn't cost much these days and over the course of time, it saves hours and hours of time and prevents you from having to use work-around solutions like this one. The business case is a solid pitch.
Ignoring all of that, what about grabbing the video stream directly off of the video card? I know that the latest video card drivers from nVidia currently support streaming video directly via "ShadowPlay" (no additional programming required).
As the previous poster mentioned, just use Shadowplay if your hardware supports it. But as the title mentions "slow computer" it might be better to use a capture card such as BlackMagic Intensity. Probably best is to use another computer/laptop that has this card and forward the video output to that card in the other computer. That way there is basically 0 overhead and your local harddisk also doesn't need to store the video data.
Such capture cards/equipment are pretty cheap (around 100 euro I think).
I guess if you are serious about making a game you should be prepared to invest some money into it, for example to make good marketing material.
*clears throat*
So if we do the math...
(Avg program worth per hour 15.00-50.00) So lets use the min a programmer makes to do the math...
8-15hrs (2 days of about 8 hours a day) = Est. 150-250 dollars just to write something your going to use no more then a week.
If you ask me, you may as well buy one of those game recorders those Chinese manufacturing companies are barfing out. and use your time to make a good game. Basically, "if you need to break rules to get to your goal, then maybe your not doing it right."
Cant afford one a game recorder? Then maybe your should be in a job that utilizes your skills with higher pay.
Why not just record the sound as-is and then add it to the video? Recording the sound from the computer takes little processing power and no additional hardware (set the source in the recorder to "internal mix" rather than "microphone").
Also, if you've finished a game and want to make a trailer for it, take this as an excuse for yourself to get a decent nVidia card with ShadowPlay support.
In every private project I want to have undo, redo, replay anyway. Programming a "redo last 4 minutes without dropping frames" should be easy. Sound capture may be a bit special. I do not know about current APIs but I would guess one can capture one frame worth of sound and then pause the recording should be easy. And slow hardware could mean: I want to set all options to extreme, 4k res, 5 channel audio so that it still looks up to date in 2 years.
Use libavcodec/ffmpeg/etc. instead of dumping pngs and you can have your game record proper video with full sound, too.
There are other advantages of recording game state.
First of all, you can rerender everything higher quality (increasing render time greatly), secondly you can also replay game state captured on other systems.
So it's very useful for finding problems, and it *also* can be used to record gameplay.
Recording state instead of input does have advantages. For one, it's resilient to minor changes in gameplay behavior. e.g, if you just record input but then a designer tweaks the player movement speed to be a meter/second faster then replaying the recorded input will produce a different result and likely a broken replay. Recording the states of the objects will ignore that kind of change.
You can still get input-recording to be resilient (also record pertinent object configuration data; keep two copies of the data; etc.) but it's much harder and more fragile.
Ultimately it comes down to what you want to do with replays. If the in-engine replay data is meant to be short-lived because your long-term replay data is a movie, input recording is IMO superior. If this is a replay system that you expect to support in-game playback a long time after the recording, a more stateful approach makes sense.
One way to make state-based recording work better would be to ensure that you can also record events and replay any of their effects that does not modify object state. e.g., the PlaySound event. This way you get the robustness of state-based replays and all the information necessary to generate sounds, VFX, and so on.
I don't believe that there's a good reason to need that kind of stability, though. For long-term replay storage, upload a movie to Twitch or the like. If you then only need short-term use of in-engine replays you can use input recording and get the other advantages it offers like its use for system tests and bug reports.
Programmer time is expensive. Why would you ever want to spend programmer time developing a solution to a problem which has already been solved dozens of times with existing software? Got a slow computer? Get a faster one. Most game developers have/should have great hardware. Hardware doesn't cost much these days and over the course of time, it saves hours and hours of time and prevents you from having to use work-around solutions like this one. The business case is a solid pitch.
Ignoring all of that, what about grabbing the video stream directly off of the video card? I know that the latest video card drivers from nVidia currently support streaming video directly via "ShadowPlay" (no additional programming required).
I heard ShadowPlay has some problem recording OpenGL apps
One solution I used was to record without video compression. You need quite some free HDD space, but takes a lot of load off your CPU
Man, recording with a slow computer is the worst, but you nailed some good tricks here. I’ve also found that adjusting resolution and bitrate helps a ton. Oh, and if you’re doing anything GPU-related, make sure you dont have a bottleneck, if so www.mygpuprice.com is your friend!
I wanted to make a game play trailer for my original arcade puzzle game Futile Tiles (http://www.futiletiles.com). The game is very fast and I needed to achieve high framerate and quality for the video, which is challenging using a slow computer. Low recording frame rate can also distract controlling the game actions.
It does sound like a lot of trouble where two better solution arise:
- Acquire the proper hardware (computer/video card)
or
- External capture (using a webcam for example)
I'm trying to find a scenario where the suggested solutions would be more efficient and simply can't...
(If you could enlighten me, I'd be able to peer review this...)