Я объединил 9 картинок одинакового размера 320х562 каждая. Они помещаются в одну горизонтальную строку, что приводит к файлу размером 2880x562.

Теперь я хочу сделать пустой экран размером 320х562 в качестве фона и переместить этот большой плоский файл справа налево в качестве наложения, чтобы создать эффект скольжения.

Это команда, которую я использовал после небольшого эксперимента:

ffmpeg -loop 1 -i result.jpg -filter_complex "nullsrc=size=320x562 [background];[0:v] setpts=PTS-STARTPTS [catalog]; [background][catalog] overlay=shortest=1:x='if(gte(t,4)*lte(x, 2880), -(t-4)*165)'" -t 24 -y out.mp4

Он помещает наложенное изображение в ту же позицию с фоном, что и начальная точка.

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

  • Я хотел, чтобы наложение начало плавать там, где t>4 и x<=2560 , поэтому, даже если t увеличивается, слайд должен остановиться там, где верхняя правая позиция наложения совпадает с верхней правой стороной фона. Сроки, кажется, работают, но ограничение позиции - нет. Как я могу ссылаться на текущий X?

  • Имея ошибку о -(t-4)*144 части выражения. Общая продолжительность составляет 24. Оверлей начинает скользить через 4 секунды. Итак, видео должно показывать скольжение 9 * 320 пикселей (2880) за 20 секунд. Но это дает 144, а результат 2880/20 делает наложение исчерпанным примерно через ~ 22 секунды, и после этого появляются некоторые пиксели мусора. Каков наилучший способ завершить наложение, когда оно заканчивается?

1 ответ1

0

Поскольку вы перемещаете изображение каталога справа налево и хотите остановиться, когда 9-е изображение совпадает с фоном, вам нужно, чтобы наложение x было -8*320 = -2560 . Но поскольку вы останавливаете оверлей, когда это происходит, вам просто нужно рассчитать скорость, которая равна 2560/20 = 128.

Так,

ffmpeg -loop 1 -t 24 -i result.jpg
       -filter_complex
        "nullsrc=size=320x562[background];
        [background][0:v]overlay=shortest=1:x='min(0,-(t-4)*128))'"
       -y out.mp4

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