用python渲染和保存视频文件 [英] Render and save a video file with python

查看:1256
本文介绍了用python渲染和保存视频文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用python生成一些正在移动的2d几何对象(圆形,正方形等)的视频。



我怀疑解决方案可以使用像pygame这样的库,用于渲染的小猪,然后保存截图并使用其他库添加到视频文件。



重要的是,我需要这样做,而不必屏幕/窗口打开;基本上pyagme或小猪应该在缓冲区而不是屏幕上写图像。



我使用matplotlib取得了一些成功,但我觉得它不是最合适的工具项目,特别是如果我想使图形更加花哨,并希望有快速运行的东西。



编辑:
我最终使用了类似命令行工具ffmpeg

解决方案

如果您在网上进行了搜索,并最终在这里希望单线程执行此操作,恐怕你不会在这里找到这个。然而,这可能会指向正确的方向。



在pyglet和大多数用于Python的GL库中,您不会找到预先创建的API来生成视频然而它们确实提供了一种获取每个单独帧的原始像素数据的方法。



我会坚持使用Pyglet,因为它是迄今为止最快的图书馆,已经尝试过了,并且它是我的宗教。



pre $ pyglet.image.get_buffer_manager()。get_color_buffer()。save('screenshot .png')

这段代码并不用于保存特定的图片,而是用于抓取整个窗口并将其保存到一个名为 screenshot.png



的文件中。使用它可以创建索引的一系列屏幕截图:

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

一旦你完成了你的应用程序的运行只需使用任何视频编码工具(mencoder,ffmpeg,windows电影制作人或w / e)并将所有剧照合并到一个视频文件中即可。

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

瞧,你应该有一个你的剧照的 test.avi 视频文件。

现在有更好的替代品,比如将视频流到每个单独的帧以节省处理时间,但要做到这一点,您需要立即与ffmpeg进行交互,并且存在这样的库,例如 https://github.com/kanryu/pipeffmpeg


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

这篇关于用python渲染和保存视频文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆