gst-launch-1.0 -e \
videomixer name=mix background=0 \
sink_1::xpos=0 sink_1::ypos=0 \
sink_2::xpos=200 sink_2::ypos=0 \
sink_3::xpos=0 sink_3::ypos=100 \
sink_4::xpos=200 sink_4::ypos=100 \
! autovideosink \
filesrc location='/home/debtest/CandidAridLeafhopper-mobile.mp4' \
! decodebin \
! videoscale \
! video/x-raw,width=200,height=100 \
! mix.sink_1 \
filesrc location='/home/debtest/89b6db2df4b74cf1abcf9072b014c49f.mp4' \
! decodebin \
! videoscale \
! video/x-raw,width=200,height=100 \
! mix.sink_2 \
filesrc location='/home/debtest/83d4d5fbfb7c450fa230345f145a0b05.mp4' \
! decodebin \
! videoscale \
! video/x-raw,width=200,height=100 \
! mix.sink_3 \
filesrc location='/home/debtest/a2206bf8-4119-4a79-a3eb-7c12d72c4134.mp4' \
! decodebin \
! videoscale \
! video/x-raw,width=200,height=100 \
! mix.sink_4gst-launch-1.0 -e \
videomixer name=mix background=0 \
sink_1::xpos=0 sink_1::ypos=0 \
sink_2::xpos=200 sink_2::ypos=0 \
sink_3::xpos=0 sink_3::ypos=100 \
sink_4::xpos=200 sink_4::ypos=100 \
! autovideosink \
uridecodebin uri='file:///home/debtest/CandidAridLeafhopper-mobile.mp4' \
! videoscale \
! video/x-raw,width=200,height=100 \
! mix.sink_1 \
uridecodebin uri='file:///home/debtest/89b6db2df4b74cf1abcf9072b014c49f.mp4' \
! videoscale \
! video/x-raw,width=200,height=100 \
! mix.sink_2 \
uridecodebin uri='file:///home/debtest/83d4d5fbfb7c450fa230345f145a0b05.mp4' \
! videoscale \
! video/x-raw,width=200,height=100 \
! mix.sink_3 \
uridecodebin uri='file:///home/debtest/a2206bf8-4119-4a79-a3eb-7c12d72c4134.mp4' \
! videoscale \
! video/x-raw,width=200,height=100 \
! mix.sink_4
VLC HowTo/Make a mosaic https://wiki.videolan.org/VLC_HowTo/Make_a_mosaic/
C# - обертка https://code.videolan.org/videolan/LibVLCSharp
С# - пример https://code.videolan.org/mfkl/libvlcsharp-samples...
Еще C# https://github.com/grigory-lobkov/rtsp-camera-view
Python https://github.com/vzhd1701/gridplayer