1

Я хотел бы, чтобы 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 ответ1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .