我正在尝试重现"Fractals without a computer"但是使用计算机而不是三台投影机。 我认为使用gstreamer应该很简单:只需使用 tee 从相机复制流,然后使用 videomixer 将三张相同的图片放在一起。
这里我使用' videotestsrc pattern = 1 '作为我希望复制的流,并且' videotestsrc pattern =“black”'作为背景整个屏幕。
#!/bin/bash
gst-launch -v \
videotestsrc pattern=1 ! video/x-raw-yuv,width=200,height=200 \
! tee name=t \
videomixer name=mix \
sink_0::xpos=0 sink_0::ypos=0 \
sink_1::xpos=100 sink_1::ypos=0 \
sink_2::xpos=200 sink_2::ypos=200 \
sink_3::xpos=0 sink_3::ypos=200 \
! ffmpegcolorspace ! xvimagesink \
videotestsrc pattern="black" ! video/x-raw-yuv,width=400,height=400 \
! mix.sink_0 \
t. ! queue ! mix.sink_1 \
t. ! queue ! mix.sink_2 \
t. ! queue ! mix.sink_3 \
问题是我只得到两个副本:一个对应于sink_1,另一个对应于sink_2。 如果我交换最后两行,那么我只得到sink_1和sink_3。
所以问题是如何显示所有三个副本?
答案 0 :(得分:5)
像这样的东西
gst-launch -v \
videotestsrc pattern=1 ! video/x-raw-yuv,width=200,height=200 \
! tee name=t \
videomixer name=mix \
sink_0::xpos=0 sink_0::ypos=0 sink_0::zorder=0\
sink_1::xpos=100 sink_1::ypos=0 sink_1::zorder=1\
sink_2::xpos=200 sink_2::ypos=200 sink_2::zorder=2\
sink_3::xpos=0 sink_3::ypos=200 sink_3::zorder=3\
! ffmpegcolorspace ! xvimagesink \
videotestsrc pattern="black" ! video/x-raw-yuv,width=400,height=400 \
! mix.sink_0 \
t. ! queue ! mix.sink_1 \
t. ! queue ! mix.sink_2 \
t. ! queue ! mix.sink_3
答案 1 :(得分:4)
Yoa!为每个i = 0..3添加sink_i :: zorder = i解决问题。