Render and save a video file with python

If you made a search online and ended up here hoping for a one-liner to do this, I'm afraid you won't find this here. However, this might point you in the right direction.

In pyglet, and most of the GL libraries for Python you won't find a pre-created API to generate video streams, however they do however provide a way to get the raw pixel data of each individual frame.

I'll stick to Pyglet because it's by far the fastest library I've tried over the yers and It's my religion.

pyglet.image.get_buffer_manager().get_color_buffer().save('screenshot.png')

This code is not used to save a specific image, rather it's used to grab the entire window and save it to a file called screenshot.png.

Use this to create a indexed series of screenshots:

frame = 0
def on_draw():
    ...
    pyglet.image.get_buffer_manager().get_color_buffer().save(str(frame)+'.png')

Once you're done running your application simply use any video encoding tool (mencoder, ffmpeg, windows movie maker or w/e) and combine all the stills into a video file.

ffmpeg -f image2 -framerate 25 -pattern_type sequence -start_number 0 -r 3 -i %04d.png -s 720x480 test.avi

And voila, you should have a test.avi video file of your stills.
Now there's better alternatives, such as to pipe the video to ffmpeg each individual frame to save processing time, but to do this you need to interact with ffmpeg right away and there's libraries for this such as https://github.com/kanryu/pipeffmpeg