Você pode usar os fps , escala , setsar , setpts , concat , < href="https://ffmpeg.org/ffmpeg-filters.html#palettegen"> palettegen e filtros paletteuse .
1. Torne todas as entradas uniformes, concatene e, em seguida, gere a paleta
ffmpeg -i input0 -i input1 -i input2 -filter_complex \
"[0:v]fps=10,scale=320:240,setsar=1/1,setpts=PTS-STARTPTS[v0]; \
[1:v]fps=10,scale=320:240,setsar=1/1,setpts=PTS-STARTPTS[v1]; \
[2:v]fps=10,scale=320:240,setsar=1/1,setpts=PTS-STARTPTS[v2]; \
[v0][v1][v2]concat=n=3:v=1:a=0,palettegen[out]" \
-map "[out]" palette.png
- Você pode não precisar de fps, mas não mostrou nenhuma informação sobre suas entradas, então eu tive que fazer suposições.
2. Codificar para GIF
ffmpeg -i input0 -i input1 -i input2 -i palette.png -filter_complex \
"[0:v]fps=10,scale=320:240,setsar=1/1,setpts=PTS-STARTPTS[v0]; \
[1:v]fps=10,scale=320:240,setsar=1/1,setpts=PTS-STARTPTS[v1]; \
[2:v]fps=10,scale=320:240,setsar=1/1,setpts=PTS-STARTPTS[v2]; \
[v0][v1][v2]concat=n=3:v=1:a=0[vv]; \
[vv][3:v]paletteuse[out]" \
-map "[out]" output.gif
- Você não pode "converter MP4 para GIF sem perder qualidade", mas há uma pequena chance de você não notar muita diferença desde que você disse que o MP4 foi criado a partir do GIF. Tudo depende do aspecto das suas entradas e de quantas cores existem.