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_ratio
opção de escalapara ajustar tamanhos de entrada arbitrários em 640x640 e poradicionando split e fifopara evitar criar o arquivo de paleta temporário.