Как с помощью ffmpeg преобразовать MP4, обрезать и изменить размер в GIF?

Как с помощью ffmpeg преобразовать MP4, обрезать и изменить размер в GIF?

Я хотел бы, чтобы ffmpeg взял видеофайл MP4 1280x720, обрезал его до квадратного формата и изменил его размер до 640x640.

Следующие две команды работают для меня с отличным качеством GIF, но им просто не хватает правильного изменения размера. Они дают мне выходной GIF, но его размер составляет 1138x640 вместо 640x640.

Создание палитры:

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

Вывод GIF с использованием палитры:

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

Это дает мне 1138x640.gif, но как мне сделать его 640x640, не прибегая к другой отдельной команде?

решение1

Вот простой метод, который будет работать для входных сигналов 1280x720.

Сгенерировать палитру:

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

Создать 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

При желании вы можете сделать это более сложным.добавление force_aspect_ratioопции масштабированиядля вписывания произвольных размеров входных данных в 640x640, идобавление split и fifoчтобы избежать создания временного файла палитры.

Связанный контент