Как сделать скользящие эффекты?
Как правило, для слайд-эффектов вы должны:
- Создайте фон определенного цвета (например, черного) правильного размера и продолжительности, на котором будет отображаться изображение, используя источник
color
.
- Прочитайте изображение с источником
movie
- Наложение изображения поверх фона с помощью фильтра
overlay
- Установите координаты наложения в соответствии с текущим номером кадра или отметкой времени
пример
Вот пример с изображением, сохраненным как image.png
(размер: 1920⨉1080, продолжительность клипа: 15 секунд):
ffmpeg -f lavfi -i "\
color=black:d=15:s=1920x1080[background]; \
movie=image.png[overlay]; \
[background][overlay]overlay='W-n:(H-h)/2' \
" output.mp4
Изображение будет скользить справа налево без остановки:
Вот пример с остановкой изображения в центре:
ffmpeg -f lavfi -i "\
color=black:d=15:s=1920x1080[background]; \
movie=image.png[overlay]; \
[background][overlay]overlay='min(W-n\,0):(H-h)/2' \
" output.mp4
Как контролировать параметры скольжения
Положение наложения в любой момент времени указывается в качестве опции фильтра overlay
. Положение должно быть задано как координаты верхнего левого угла изображения.
Координатная пара X/Y в первом примере выше - это W-n
и (H-h)/2
, где:
W
- ширина фона (1920)
n
- номер текущего кадра
H
- высота фона (1080)
h
- высота наложения (здесь 1080, но может отличаться)
Следовательно, в кадре 0 изображение будет первоначально размещено в 1920 - 0 = 1920 пикселей слева, поэтому изображение будет увеличиваться справа при увеличении n .
Несколько советов:
- Если вы хотите увеличить скорость скользящего изображения, вы должны умножить n на фиксированное число.
- Если вы хотите, чтобы изображение остановилось в какой-то момент, выражение
x
должно иметь значение 0
, поэтому вы можете использовать min(W-n, 0)
. В этом случае, даже если номер кадра больше ширины, изображение не будет перемещено в отрицательную позицию x, но останется равным 0.
- Если вы хотите сдвинуть изображение слева направо или снизу вверх, просто измените выражения для координат соответственно.