更新时间:2022-05-27 01:09:43
要详细说明 ensonic 的答案,这是一个例子:
To elaborate on ensonic's answer, here's an example:
import os
import sys
import gst
def get_frame(path, offset=5, caps=gst.Caps('image/png')):
pipeline = gst.parse_launch('playbin2')
pipeline.props.uri = 'file://' + os.path.abspath(path)
pipeline.props.audio_sink = gst.element_factory_make('fakesink')
pipeline.props.video_sink = gst.element_factory_make('fakesink')
pipeline.set_state(gst.STATE_PAUSED)
# Wait for state change to finish.
pipeline.get_state()
assert pipeline.seek_simple(
gst.FORMAT_TIME, gst.SEEK_FLAG_FLUSH, offset * gst.SECOND)
# Wait for seek to finish.
pipeline.get_state()
buffer = pipeline.emit('convert-frame', caps)
pipeline.set_state(gst.STATE_NULL)
return buffer
def main():
buf = get_frame(sys.argv[1])
with file('frame.png', 'w') as fh:
fh.write(str(buf))
if __name__ == '__main__':
main()
这将生成一个PNG图像.您可以使用gst.Caps("video/x-raw-rgb,bpp=24,depth=24")
或类似的方法获取原始图像数据.
This generates a PNG image. You can get raw image data using gst.Caps("video/x-raw-rgb,bpp=24,depth=24")
or something like that.
请注意,在GStreamer 1.0(而不是0.10)中,playbin2
已重命名为playbin
,并且convert-frame
信号被命名为convert-sample
.
Note that in GStreamer 1.0 (as opposed to 0.10), playbin2
has been renamed to playbin
and the convert-frame
signal is named convert-sample
.
GStreamer应用程序开发手册的这一章. 0.10 playbin2
文档似乎不再在线,但是1.0的文档是
The mechanics of seeking are explained in this chapter of the GStreamer Application Development Manual. The 0.10 playbin2
documentation no longer seems to be online, but the documentation for 1.0 is here.