FFMPEG: анимация из картинок, одна движется поверх другой

от автора

в
Время чтения: 2 мин.

Чтобы создать анимацию, где одна картинка движется по диагонали от левого нижнего угла к верхнему правому углу, и при этом картинка не видна в начале и в конце анимации, можно использовать FFmpeg. Для этого нужно настроить начальную и конечную позиции картинки за пределами экрана, а также плавно изменять её прозрачность.


1. Подготовка изображений

  • background.jpg — фоновое изображение.
  • foreground.png — изображение, которое будет двигаться (должно поддерживать прозрачность, например, PNG).

2. Команда FFmpeg

ffmpeg \
  -loop 1 -i background.jpg \
  -loop 1 -i foreground.png \
  -filter_complex \
  "[1]scale=200:-1,format=rgba[fg]; \
   [0][fg]overlay=x='if(between(t,1,9), -w+(t-1)*(W+w)/8, NAN)':y='if(between(t,1,9), H-(t-1)*(H+h)/8, NAN)':enable='between(t,1,9)', \
    fade=t=in:st=1:d=1:alpha=1,fade=t=out:st=9:d=1:alpha=1" \
  -t 10 -c:v libx264 -pix_fmt yuv420p output.mp4

3. Разбор команды

  • -loop 1 -i background.jpg:
  • Зацикливает фоновое изображение.
  • -loop 1 -i foreground.png:
  • Зацикливает движущееся изображение.
  • [1]scale=200:-1,format=rgba[fg]:
  • Масштабирует движущееся изображение до ширины 200 пикселей (высота автоматически подстраивается).
  • format=rgba — сохраняет прозрачность (альфа-канал).
  • overlay=x='if(between(t,1,9), -w+(t-1)*(W+w)/8, NAN)':y='if(between(t,1,9), H-(t-1)*(H+h)/8, NAN)':enable='between(t,1,9)':
  • x='if(between(t,1,9), -w+(t-1)*(W+w)/8, NAN)':
    • between(t,1,9) — движение происходит между 1 и 9 секундами.
    • -w — начальная позиция за пределами экрана (слева).
    • (t-1)*(W+w)/8 — движение по горизонтали от левого края к правому.
  • y='if(between(t,1,9), H-(t-1)*(H+h)/8, NAN)':
    • H — высота фонового изображения.
    • H-(t-1)*(H+h)/8 — движение по вертикали от нижнего края к верхнему.
  • enable='between(t,1,9)' — изображение видимо только между 1 и 9 секундами.
  • fade=t=in:st=1:d=1:alpha=1,fade=t=out:st=9:d=1:alpha=1:
  • fade=t=in:st=1:d=1:alpha=1 — плавное появление (fade-in) с 1 по 2 секунду.
  • fade=t=out:st=9:d=1:alpha=1 — плавное исчезновение (fade-out) с 9 по 10 секунду.
  • -t 10:
  • Длительность анимации (10 секунд).
  • -c:v libx264:
  • Кодек для кодирования видео (H.264).
  • -pix_fmt yuv420p:
  • Формат пикселей для совместимости с большинством устройств.
  • output.mp4:
  • Имя выходного файла.

4. Результат

  • Картинка начнет движение из левого нижнего угла (за пределами экрана) и закончит в правом верхнем углу (за пределами экрана).
  • Картинка плавно появляется в начале анимации и плавно исчезает в конце.

5. Создание GIF-анимации

Если вам нужен GIF вместо видео, добавьте параметр -vf fps=10 и измените выходной формат:

ffmpeg \
  -loop 1 -i background.jpg \
  -loop 1 -i foreground.png \
  -filter_complex \
  "[1]scale=200:-1,format=rgba[fg]; \
   [0][fg]overlay=x='if(between(t,1,9), -w+(t-1)*(W+w)/8, NAN)':y='if(between(t,1,9), H-(t-1)*(H+h)/8, NAN)':enable='between(t,1,9)', \
    fade=t=in:st=1:d=1:alpha=1,fade=t=out:st=9:d=1:alpha=1" \
  -t 10 -vf fps=10 output.gif

Здесь:

  • -vf fps=10 — устанавливает частоту кадров (10 кадров в секунду).
  • output.gif — имя выходного GIF-файла.

6. Дополнительные настройки

  • Скорость движения:
  • Измените формулу для x и y, чтобы настроить скорость движения. Например, (t-1)*(W+w)/10 замедлит движение.
  • Размер картинки:
  • Измените параметр scale=200:-1, чтобы настроить размер движущейся картинки.
  • Длительность анимации:
  • Измените параметр -t 10, чтобы увеличить или уменьшить длительность анимации.

Итог

  • Используйте FFmpeg для создания анимации с движением картинки по диагонали.
  • Настройте начальную и конечную позиции за пределами экрана.
  • Добавьте плавное появление и исчезновение с помощью фильтра fade.

Эта команда создаст анимацию, где картинка движется по диагонали и плавно появляется/исчезает.


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Сколько будет 3 + 4?