Questão Concatenar uma lista de arquivos com diferentes resoluções


Eu tenho uma lista de arquivos mp4 que são de kb ou de no máximo 4 MB (eles eram na verdade gifs, mas baixados como mp4) .Então, quando eu concatená-los usando uma lista deles o vídeo não funciona como todos eles são de tamanhos diferentes (resolução sábia) e todos não estão na ordem vertical.Assim, qualquer ajuda com esse assunto e também eu f alguém seria gentil o suficiente para me dizer o comando FFmpeg para converter esta lista mp4 para gif sem perder quality.Thanks antecipadamente


0


origem


Você terá que recodificar uma vez, especificando uma resolução fixa e taxa de quadros. Em seguida, você gera uma paleta e, em seguida, o GIF. - Gyan


Respostas:


Você pode usar o fps, escala, Setsar, setpts, concat, paletae paletause filtros.

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 você 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.

Veja também


2



obrigado por grande e breve resposta, mas a partir de entrada 1,2,3 e assim por diante, seria um trabalho muito difícil, pois tenho mais de 100 arquivos.Existe alguma maneira eu posso usar o arquivo mylist.txt contendo todos os arquivos de informações como neste exemplo FFmpeg -f concat -i mylist.txt -c copy output.mp4 - hacker red
Em suma, eu gostaria de fazer tudo isso para arquivos em massa, se isso seria possível - hacker red
Usar ffmpeg -f concat -i mylist.txt -vf "fps=10,scale=320:240,setsar=1,palettegen[out]" -map "[out]" palette.png para o primeiro comando. E ffmpeg -f concat -i mylist.txt -i palette.png -filter_complex "[0:v]fps=10,scale=320:240,setsar=1[v0];[v0][1:v],palettegen[out]" -map "[out]" -fflags +genpts output.gif - Gyan
@mulvya erro para o seu primeiro comando Output with label 'out' does not exist in any defined filter graph, or was already used elsewhere. - hacker red
Desculpe, é um vf assim remover [out] e -map "[out]" - Gyan