3

Я использовал приведенную ниже команду, чтобы сделать переход наложенного изображения слева направо на видео.

ffmpeg -i Test.mp4 -i transparent.png -filter_complex "overlay = x = 'if(gte(t, 0), -w+(t)* 100, 3)':y = 450" out.mp4

Наложение изображения непрерывно перемещается слева направо. Мне нужно, чтобы он остановился в определенный момент, как переход слева направо. Как это сделать?

2 ответа2

8

Хех, интересное задание. Так что я думаю, что решение

ffmpeg -i 1.ts -i 2.ts -filter_complex "[0:v][1:v]overlay=x='if(lte(-w+(t)*100,w/2),-w+(t)*100,w/2)':y=0[out]" -map '[out]' -y out.mp4

Этот график фильтра перемещает второе изображение слева направо, пока не достигнет половины экрана (w/2). Поэтому все, что вам нужно изменить, это w/2 в этом выражении. То же самое для некоторой статической точки остановки (100 пикселей):

ffmpeg -i 1.ts -i 2.ts -filter_complex "[0:v][1:v]overlay=x='if(lte(-w+(t)*100,100),-w+(t)*100,100)':y=0[out]" -map '[out]' -y out.mp4

Надеюсь, поможет.

0

Как сделать скользящие эффекты?

Как правило, для слайд-эффектов вы должны:

  • Создайте фон определенного цвета (например, черного) правильного размера и продолжительности, на котором будет отображаться изображение, используя источник 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.
  • Если вы хотите сдвинуть изображение слева направо или снизу вверх, просто измените выражения для координат соответственно.

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