#!/bin/sh set -e set -x FILE1=sample_440hz.webm FILE2=sample_880hz.webm # This pipeline works fine #gst-launch-1.0 \ # concat name=c ! videoconvert ! videoscale ! autovideosink \ # videotestsrc num-buffers=100 ! c. \ # videotestsrc num-buffers=100 pattern=ball ! c. # Here only the video from the first stream is shown gst-launch-1.0 \ concat name=c ! decodebin ! autovideosink \ filesrc location="$FILE1" ! c. \ filesrc location="$FILE2" ! c. # This pipeline using one decoder per filesrc works fine gst-launch-1.0 \ concat name=c ! videoconvert ! videoscale ! autovideosink \ filesrc location="$FILE1" ! matroskademux ! vp9dec ! c. \ filesrc location="$FILE2" ! matroskademux ! vp9dec ! c. # These pipelines work fine, but should a streamsynchronizer be added? # And if so, where? gst-launch-1.0 \ concat name=video_concat ! autovideosink \ concat name=audio_concat ! autoaudiosink \ filesrc location="$FILE1" ! decodebin name=d1 \ filesrc location="$FILE2" ! decodebin name=d2 \ d1. ! video/x-raw ! queue ! video_concat. \ d1. ! audio/x-raw ! queue ! audio_concat. \ d2. ! video/x-raw ! queue ! video_concat. \ d2. ! audio/x-raw ! queue ! audio_concat. gst-launch-1.0 -e \ mp4mux name=mp4 ! filesink location=out.mp4 \ concat name=video_concat ! videoconvert ! x264enc tune=4 ! mp4. \ concat name=audio_concat ! audioconvert ! voaacenc ! mp4. \ filesrc location="$FILE1" ! decodebin name=d1 \ filesrc location="$FILE2" ! decodebin name=d2 \ d1. ! video/x-raw ! queue ! video_concat. \ d1. ! audio/x-raw ! queue ! audio_concat. \ d2. ! video/x-raw ! queue ! video_concat. \ d2. ! audio/x-raw ! queue ! audio_concat.