Создавайте бесконечную анимацию цикла с помощью ffmpeg, используя только определенные кадры

#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
 

Что я пытаюсь понять, как это сделать, так это:

  1. Создайте еще один анимированный gif, используя только первые 20 кадров, и анимация будет бесконечно повторяться (без паузы в конце анимации).
  2. Создайте еще один анимированный gif, используя только первые 20 кадров, где анимация воспроизводится, затем останавливается в конце на 3 секунды, а затем продолжается. (бесконечно) Пример: (воспроизведение анимации — пауза 3 секунды — воспроизведение анимации — пауза 3 секунды — воспроизведение анимации — пауза 3 секунды…)

Примечание: Я пытаюсь избежать необходимости вводить wrist_0001.png wrist_0002.png…is там далеко, чтобы сделать wrist_0001.png для wrist_0020.png?

Ответ №1:

  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 с приемлемым качеством?
  2. Создайте еще один анимированный 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 для получения дополнительной информации.