O problema que você está tendo com o muxing no avi está relacionado ao fato de o filesrc estar fornecendo buffers para o avimux que não estão adequadamente alinhados com os mjpeg frames, então o avimux está criando amostras com alinhamento errado internamente, tornando mais difícil para os jogadores para usá-los mais tarde durante a reprodução.
Isso pode ser corrigido usando um analisador mjpeg após o capsfilter (jpegparse?). Outra opção é decodificar e re-codificar as amostras para que elas sejam alinhadas e alteradas corretamente. O seguinte pipeline deve funcionar:
gst-launch-1.0 filesrc location=encode.mjpeg \
! 'image/jpeg,framerate=30/1,width=1280,height=720' ! decodebin ! videoconvert ! \
<some encoder> ! <some muxer> ! filesink location=outputfile
Você pode selecionar o codificador e muxer que quiser, você pode até mesmo codificá-los de volta para jpeg e mux no avi, como você queria inicialmente.
Editar : para tentar transformar o conteúdo em avi sem decodificar, tente algo como:
gst-launch-1.0 filesrc location=encode.mjpeg \
! 'image/jpeg,framerate=30/1,width=1280,height=720' ! jpegparse ! avimux \
! filesink location=encode.avi . -v
Se o jpegparse fizer isso funcionar muito bem, o '' image / jpeg, framerate = 30/1, largura = 1280, altura = 720 '' não deve ser necessário.