要详细说明ensonic的答案,这是一个例子:
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()
Run Code Online (Sandbox Code Playgroud)
这会生成PNG图像.您可以使用gst.Caps("video/x-raw-rgb,bpp=24,depth=24")或类似的方式获取原始图像数据.
请注意,在GStreamer 1.0(而不是0.10)中,playbin2已重命名为playbin并且convert-frame信号已命名convert-sample.
GStreamer应用程序开发手册的这一章解释了搜索的机制.0.10 playbin2文档似乎不再在线,但1.0的文档就在这里.
| 归档时间: |
|
| 查看次数: |
4713 次 |
| 最近记录: |