Me gustaría que ffmpeg tomara un archivo de video MP4 de 1280x720, lo recortara a una proporción de tamaño cuadrado y lo redimensionara a 640x640.
Los siguientes dos comandos me funcionan con una excelente calidad GIF, pero solo falta el cambio de tamaño correcto. Me da una salida GIF pero el tamaño es 1138x640 en lugar de 640x640.
Generando una paleta:
ffmpeg -y -ss 30 -t 3 -i input.mp4 \
-vf fps=10,scale=1138:-1:flags=lanczos,palettegen palette.png
Generando GIF usando la 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
Esto me da un 1138x640.gif pero ¿cómo puedo hacer que sea 640x640 sin depender de otro comando separado?
Respuesta1
Aquí hay un método simple que funcionará para entradas de 1280x720.
Generar paleta:
ffmpeg -i input.mp4 -filter_complex "fps=10,scale=-1:640,crop=ih:ih,setsar=1,palettegen" palette.png
Crear 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
Puedes hacer esto más complejo si lo deseasagregando la force_aspect_ratio
opción de escalapara ajustar tamaños de entrada arbitrarios en 640x640, y poragregando split y quincepara evitar crear el archivo de paleta temporal.