python保存,用python渲染和保存视频文件

I want to use python to generate a video of some 2d geometric objects (circles, squares, ...) that are moving around.

I suspect the solution could be using a library like pygame, piglet for the render and then save screenshot and append to video file using some other library.

Importantly I need to do this without having a screen/window opened; basically pyagme or piglet should write an image on some buffer instead of screen.

I had some success using matplotlib, but I feel like it is not the most appropriate tool for this project, especially if I want to make the graphics more fancy and want to have something that runs fast.

EDIT:

I ended up using command line tools like ffmpeg

解决方案

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值