将 gst-launch 命令转换为 Python 程序

发布于 2024-11-27 15:01:56 字数 560 浏览 2 评论 0原文

如何使用 PyGST 模块将以下 gst-launch 命令实施到 Python 程序中?

gst-launch-0.10 v4l2src ! \
'video/x-raw-yuv,width=640,height=480,framerate=30/1' ! \
tee name=t_vid ! \
   queue ! \
   videoflip method=horizontal-flip ! \
   xvimagesink sync=false \
t_vid. ! \
   queue ! \
   videorate ! \
   'video/x-raw-yuv,framerate=30/1' \
   ! queue ! \
mux. \
   alsasrc ! \
   audio/x-raw-int,rate=48000,channels=2,depth=16 ! \
   queue ! \
   audioconvert ! \
   queue ! \
mux. avimux name=mux ! \
   filesink location=me_dancing_funny.avi

How do I implement the following gst-launch command into a Python program using the PyGST module?

gst-launch-0.10 v4l2src ! \
'video/x-raw-yuv,width=640,height=480,framerate=30/1' ! \
tee name=t_vid ! \
   queue ! \
   videoflip method=horizontal-flip ! \
   xvimagesink sync=false \
t_vid. ! \
   queue ! \
   videorate ! \
   'video/x-raw-yuv,framerate=30/1' \
   ! queue ! \
mux. \
   alsasrc ! \
   audio/x-raw-int,rate=48000,channels=2,depth=16 ! \
   queue ! \
   audioconvert ! \
   queue ! \
mux. avimux name=mux ! \
   filesink location=me_dancing_funny.avi

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

拥醉 2024-12-04 15:01:56

您无法真正将“gst-launch 语法”转换为“python 语法”。

您可以使用 gst.element_factory_make() 和朋友“手动”(以编程方式)创建相同的管道,然后自己链接所有内容。

或者您只需使用类似以下内容的内容:

pipeline = gst.parse_launch ("v4l2src ! ..... ")

您可以使用例如 v4l2src name=mysrc 来给管道字符串名称中的元素命名! 从管道中检索元素

...然后使用src = pipeline.get_by_name ('mysrc')

,然后在其上设置属性,例如:

src.set_property("location", filepath)

You can't really convert "gst-launch syntax" to "python syntax".

Either you create the same pipeline 'manually' (programmatically) using gst.element_factory_make() and friends, and link everything yourself.

Or you just use something like:

pipeline = gst.parse_launch ("v4l2src ! ..... ")

You can give elements in your pipeline string names with e.g. v4l2src name=mysrc ! ... and then retrieve the element from the pipeline with

src = pipeline.get_by_name ('mysrc')

and then set properties on it like:

src.set_property("location", filepath)

一梦浮鱼 2024-12-04 15:01:56

看看我的 gst 模块的包装:https://github.com/vmlaker /gstwrap

请注意,分支和混合是通过仔细链接元素来定义的。那么您的特定管道是:

from gstwrap import Element, Pipeline

ee = (

    # From src to sink [0:5]
    Element('v4l2src'),
    Element('capsfilter', [('caps','video/x-raw-yuv,framerate=30/1,width=640,height=360')]),
    Element('tee', [('name', 't_vid')]),
    Element('queue'),
    Element('videoflip', [('method', 'horizontal-flip')]),
    Element('xvimagesink', [('sync', 'false')]),

    # Branch 1 [6:9]
    Element('queue'),
    Element('videorate'),
    Element('capsfilter', [('caps', 'video/x-raw-yuv,framerate=30/1')]),
    Element('queue'),

    # Branch 2 [10:15]
    Element('alsasrc'),
    Element('capsfilter', [('caps', 'audio/x-raw-int,rate=48000,channels=2,depth=16')]),
    Element('queue'),
    Element('audioconvert'),
    Element('queue'),

    # Muxing
    Element('avimux', [('name', 'mux')]),
    Element('filesink', [('location', 'me_dancing_funny.avi')]),
)

pipe = Pipeline()
for index in range(len(ee)):
    pipe.add(ee[index])

ee[0].link(ee[1])
ee[1].link(ee[2])
ee[2].link(ee[3])
ee[3].link(ee[4])
ee[4].link(ee[5])

# Branch 1
ee[2].link(ee[6])
ee[6].link(ee[7])
ee[7].link(ee[8])
ee[8].link(ee[9])

# Branch 2
ee[10].link(ee[11])
ee[11].link(ee[12])
ee[12].link(ee[13])
ee[13].link(ee[14])
ee[14].link(ee[15])

# Muxing
ee[9].link(ee[15])
ee[15].link(ee[16])

print(pipe)
pipe.start()
raw_input('Hit <enter> to stop.')

Take a look at my wrapper of the gst module: https://github.com/vmlaker/gstwrap

Note the branching and muxing is defined by careful linking of the elements. Your particular pipeline is then:

from gstwrap import Element, Pipeline

ee = (

    # From src to sink [0:5]
    Element('v4l2src'),
    Element('capsfilter', [('caps','video/x-raw-yuv,framerate=30/1,width=640,height=360')]),
    Element('tee', [('name', 't_vid')]),
    Element('queue'),
    Element('videoflip', [('method', 'horizontal-flip')]),
    Element('xvimagesink', [('sync', 'false')]),

    # Branch 1 [6:9]
    Element('queue'),
    Element('videorate'),
    Element('capsfilter', [('caps', 'video/x-raw-yuv,framerate=30/1')]),
    Element('queue'),

    # Branch 2 [10:15]
    Element('alsasrc'),
    Element('capsfilter', [('caps', 'audio/x-raw-int,rate=48000,channels=2,depth=16')]),
    Element('queue'),
    Element('audioconvert'),
    Element('queue'),

    # Muxing
    Element('avimux', [('name', 'mux')]),
    Element('filesink', [('location', 'me_dancing_funny.avi')]),
)

pipe = Pipeline()
for index in range(len(ee)):
    pipe.add(ee[index])

ee[0].link(ee[1])
ee[1].link(ee[2])
ee[2].link(ee[3])
ee[3].link(ee[4])
ee[4].link(ee[5])

# Branch 1
ee[2].link(ee[6])
ee[6].link(ee[7])
ee[7].link(ee[8])
ee[8].link(ee[9])

# Branch 2
ee[10].link(ee[11])
ee[11].link(ee[12])
ee[12].link(ee[13])
ee[13].link(ee[14])
ee[14].link(ee[15])

# Muxing
ee[9].link(ee[15])
ee[15].link(ee[16])

print(pipe)
pipe.start()
raw_input('Hit <enter> to stop.')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文