通过逐帧检索和操作来播放视频:是在每一帧创建一个新的pixbuf还是有更简单的方法?

时间:2016-11-17 15:34:58

标签: gtk pygtk gtk3 gdkpixbuf pixbuf

使用python3,gtk3。我正在开发一个计算机视觉应用程序,需要操作和显示(回放)视频中的帧。

目前,我使用静态方法Pixbuf创建一个新的new_from_data,由一个包含操作帧的 numpy 数组创建的字节序列提供,我我遇到了性能问题,例如无法以20fps播放视频。

我想知道:这是解决这类问题的方法吗?是为相对便宜或昂贵的每一帧创建一个新的Pixbuf?我应该使用其他方法,例如使用new_from_stream吗? (不熟悉)

1 个答案:

答案 0 :(得分:2)

这不是一个更容易的"但是,如果您遇到性能问题,则应尝试通过Clutter Clutter-Gtk使用硬件加速来绘制帧。

您可以创建一个GtkClutterEmbed窗口小部件,它将为您提供ClutterStage,这是一个ClutterActor。每当你有一个新的框架,你可以创建一个新的ClutterImage并做clutter_image_set_data()(就像pixbuf的new_from_data),然后将ClutterActor的ClutterContent(例如:ClutterStage)设置为这个新的ClutterImage。

这就是Gnome-Ring播放视频的方式,您可以查看其source code here的灵感。