Usando o ffmpeg, como posso converter um MP4, cortar e redimensionar para GIF?

Usando o ffmpeg, como posso converter um MP4, cortar e redimensionar para GIF?

Eu gostaria que o ffmpeg pegasse um arquivo de vídeo MP4 de 1280x720, cortasse para a proporção do tamanho quadrado e redimensionasse para 640x640

Os dois comandos a seguir funcionam para mim com ótima qualidade GIF, mas falta o redimensionamento correto. Isso me dá uma saída GIF, mas o tamanho é 1138x640 em vez de 640x640.

Gerando uma paleta:

ffmpeg -y -ss 30 -t 3 -i input.mp4 \
-vf fps=10,scale=1138:-1:flags=lanczos,palettegen palette.png

Produzindo GIF usando a paleta:

ffmpeg -ss 30 -t 3 -i input.mp4 -i palette.png -filter_complex \
"fps=10,scale=1138:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif

Isso me dá um 1138x640.gif, mas como posso fazer com que seja 640x640 sem depender de outro comando separado?

Responder1

Aqui está um método simples que funcionará para entradas de 1280x720.

Gerar paleta:

ffmpeg -i input.mp4 -filter_complex "fps=10,scale=-1:640,crop=ih:ih,setsar=1,palettegen" palette.png

Criar GIF:

ffmpeg -i input.mp4 -i palette.png -filter_complex "[0]fps=10,scale=-1:640,crop=ih:ih,setsar=1[x];[x][1:v]paletteuse" output.gif

Você pode tornar isso mais complexo, se desejar,adicionando a force_aspect_ratioopção de escalapara ajustar tamanhos de entrada arbitrários em 640x640 e poradicionando split e fifopara evitar criar o arquivo de paleta temporário.

informação relacionada