Capturing a movie of the monitor while playing a game!?!?

Moderator
Posts: 113
Joined: 2002.06
Post: #1
What are the best ways for capturing a movie of the monitor while playing a game?
I'm looking for the best quality at 800x600, 30framesPerSecond/60fieldsPerSecond.

I've used Snapz Pro and it works well, but the frame rate is slightly below 30fps. I have a VGA to s-Video convertor and can capture the video feed to a digital camcorder and then transfer back to the computer for editing. Are there other "preferred" ways of doing this? DanLab, Zwilnik, and all others, if you'll can provide some feddback/advice that would be great. Thanks again.

ProRattaFactor
(Retro-infused games for iPad, iPhone, iPod touch, and Mac)
Quote this message in a reply
Moderator
Posts: 335
Joined: 2002.04
Post: #2
for debug and general reference purposes, feeding the S-VHS out of your Mac into a video camera is fine, but not great for pro work.

When capturing for pro work, I think the edit suite guys use cameras/recorders that are synced to the video output signal so that they get higher quality output. You can buy various SVGA -> TV converters to output a synced video signal to an analogue recorder, but without paying big bucks (and getting a Betamax based recorder) you're probably not going to get anything near DV quality.

If you've got (or can borrow) a 2nd Mac that's fast enough, theoretically you could go SHVS->Firewire -> iMovie/FCP/FCE which should give you full DV quality (720x576x30fps), which will probably be about as good as you can get without hiring some specialist kit.
Quote this message in a reply
Moderator
Posts: 683
Joined: 2002.11
Post: #3
I really, really, really think someone should write a new screen movie capture program. Snapz Pro's pricing is insanely high for something like that. Ambrosia has a monopoly on it. PLEASE!

My web site - Games, music, Python stuff
Quote this message in a reply
Moderator
Posts: 916
Joined: 2002.10
Post: #4
diordna Wrote:I really, really, really think someone should write a new screen movie capture program. Snapz Pro's pricing is insanely high for something like that. Ambrosia has a monopoly on it. PLEASE!
there are others out there, but they suck pretty badly.
the reason ambrosia charges so much for it is because of how insanely powerful and fast it is... On my G5, I can capture a full screen game of warcraft3 at 1280x1024 with no framerate hit in the movie or the game. Granted it does say unregistered version of snapz pro, but still.

so.... who wants to buy me snapz x pro?
Quote this message in a reply
Member
Posts: 64
Joined: 2005.06
Post: #5
I think the easiest (if not most expensive) option would be to just purchase Snapz Pro, as much as it hurts to say it. I used to love Ambrosia, but over the past few years, a resentment has grown, and I try to stay away from them and their products as much as possible... I have no idea why.
Quote this message in a reply
kberg
Unregistered
 
Post: #6
Is this your own game?

If you have source code and can recompile it, just run it at a fixed frame increment and read each frame, saving it out as an image file. Quicktime pro can then stitch together the individual frames into a movie automatically.

I use this method all the time for presentations. The only problem is that time for you runs slower, so if its a realtime game this can make it difficult to capture good gameplay Rasp
Quote this message in a reply
Member
Posts: 64
Joined: 2005.06
Post: #7
kberg Wrote:I use this method all the time for presentations. The only problem is that time for you runs slower, so if its a realtime game this can make it difficult to capture good gameplay Rasp

You can probably fix this by recording everything that happens in the game, into a file, as a script (like Marathon does for VidMastering the game). Then you just run the script through the game with it exporting every frame (it will still slow down, but it won't matter, because you're no longer playing, it's just the script of what you did previously telling the game what to do).
Quote this message in a reply
Member
Posts: 201
Joined: 2002.06
Post: #8
Even better, make a framework that can make quicktime movies so that you can re-use it over and over again in your games.... Even better than that, release it to all these other nice devs.... Even better, make it open source!

Okay, a bit too hopeful. You would probably not want to spend so much time on it.... I'm considering it though... maybe.
Quote this message in a reply
Oldtimer
Posts: 834
Joined: 2002.09
Post: #9
Quote:If you have source code and can recompile it, just run it at a fixed frame increment and read each frame, saving it out as an image file. Quicktime pro can then stitch together the individual frames into a movie automatically.
This is a really good idea. For clarification, it's mine and Casey's game. Now, since we're talking about a high-speed action game with variable framerates, this sounds a bit tricky to put in right now. But, I'll try.

Geezus, I'm taking you up on that. I have a few projects lined up first, but I'll definitely try.
Quote this message in a reply
kberg
Unregistered
 
Post: #10
geezusfreeek Wrote:Even better, make a framework that can make quicktime movies so that you can re-use it over and over again in your games.... Even better than that, release it to all these other nice devs.... Even better, make it open source!

Okay, a bit too hopeful. You would probably not want to spend so much time on it.... I'm considering it though... maybe.

If you just want some quick code to read in your opengl window and save it as a targa file:

Code:
void save_screen(char *filename, int width, int height)
{
  GLubyte  RAW_Header[12] = { 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
  GLubyte  IMG_Header[ 6] = { width % 256, width / 256, height % 256, height / 256, 24, 0 };

  FILE *out_file = fopen(filename, "wb");
  if (out_file == NULL)
  {
    printf ("Invalid output filename\n");
    return;
  }

  fwrite(RAW_Header, 1, 12, out_file);
  fwrite(IMG_Header, 1,  6, out_file);

  int imageSize = width * height * 3;
  GLubyte *imageData = new GLubyte[imageSize];
  if (imageData == NULL)
  {
    printf ("Unable to allocate enough memory to capture screen");
    return;
  }

  glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, imageData);

  GLuint temp;
  for(int i = 0; i < int(imageSize); i += 3)
  {
    temp = imageData[i];
    imageData[i] = imageData[i + 2];
    imageData[i + 2] = temp;
  }

  fwrite(imageData, 1, imageSize, out_file);
  delete imageData;
  fclose(out_file);
}

Then in your main game loop, call this function after you draw each frame.


Justin: Thats a really good idea! None of my games are scriptable to that level currently, but adding playback from recordings shouldn't be too much trouble.

There was an article on gamasutra years back that was basically a postmortem from one of the x-wing vs tie fighter developers. He talked about how they used the playback feature as a debugging tool for their game engines internet play.

http://www.gamasutra.com/features/199909...oft_01.htm
Quote this message in a reply
Post Reply