#loops #animation #ffmpeg
Вопрос:
Я могу создать анимированный gif, используя приведенные ниже команды.
ffmpeg -i wrist_0001.png -vf palettegen=16 palette.png
ffmpeg -i wrist_d.png -i palette.png -filter_complex "fps=20,scale=720:-1:flags=lanczos[x];[x][1:v]paletteuse" logo.gif
Что я пытаюсь понять, как это сделать, так это:
- Создайте еще один анимированный gif, используя только первые 20 кадров, и анимация будет бесконечно повторяться (без паузы в конце анимации).
- Создайте еще один анимированный gif, используя только первые 20 кадров, где анимация воспроизводится, затем останавливается в конце на 3 секунды, а затем продолжается. (бесконечно) Пример: (воспроизведение анимации — пауза 3 секунды — воспроизведение анимации — пауза 3 секунды — воспроизведение анимации — пауза 3 секунды…)
Примечание: Я пытаюсь избежать необходимости вводить wrist_0001.png wrist_0002.png…is там далеко, чтобы сделать wrist_0001.png для wrist_0020.png?
Ответ №1:
- Создайте еще один анимированный gif, используя только первые 20 кадров, и анимация будет повторяться бесконечно (без паузы в конце анимации).:
ffmpeg -framerate 20 -i wrist_d.png -filter_complex "scale=720:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=16[p];[s1][p]paletteuse" -frames:v 20 -loop 0 20framesloop.gif
- При использовании набора
-framerate
изображений в качестве входных данных установите частоту кадров с помощью опции ввода демультипликатора изображений. Ваша исходная команда по умолчанию имеет значение 25 кадров в секунду, а затем использует фильтр кадров в секунду для преобразования в 20 кадров в секунду, что означает, что кадры удаляются. -loop 0
это по умолчанию для мультиплексора GIF, но я добавил его, чтобы показать, как он работает, если вы хотите изменить зацикливание. 0 означает бесконечный цикл.- В этом примере GIF создается одной командой, как показано в разделе Как конвертировать видео в GIF с помощью ffmpeg с приемлемым качеством?
- При использовании набора
- Создайте еще один анимированный gif, используя только первые 20 кадров, где анимация воспроизводится, затем останавливается в конце на 3 секунды, а затем продолжается. (бесконечно)
Наиболее эффективным методом является повторное отображение GIF с предыдущего шага:
ffmpeg -i 20framesloop.gif -c copy -final_delay 300 -loop 0 3secpause.gif
-final_delay 300
принимает значение в сантисекундах, поэтому 3 секунды равны 300 сантисекундам. Смотритеffmpeg -h muxer=gif
для получения дополнительной информации.