Я хотел бы, чтобы 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чтобы избежать создания временного файла палитры.