Driver86
@Driver86
Немодератор toster.ru

Как в ffmpeg из нескольких изображений и их зум склеить видео?

Есть несколько изображений. Надо каждое зумить в течении 2 секунд, на 10%, от центра, и потом ещё отображать каждое изображение 5 секунд. И сверху на каждое изображение наложить другое определённое png, и которое не должно участвовать в зуме.
Видео должно быть 640x480
Одним ffmpeg такое возможно сделать? Как?
P.S. Пока есть вариант генерировать кадры заранее (php + gd) и уже склеить их в ffmpeg, но пока это всё не очень, особенно с зумом (т.к. пиксель на 2 не делится, и получается дёрганный зум).
  • Вопрос задан
  • 191 просмотр
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега PHP
♬♬
Всё описанное можно сделать в ffmpeg.

Анимированный зум делается фильтром zoompan. Он с только целыми координатами работает, поэтому, чтобы не дергался, делать это в повышенном разрешении. Потом даунсэмплить.

Например, из недавнего проекта, где интерактивно генерилась анимация по шаблону, это из bash-скрипта:
FILTER="[0]                                                   \
    pad=color=0x99999900:w=${wIn}:h=${hIn}:x=${xPad}:y=${yPad}, \
    scale=20064x3264,                                           \
    zoompan=                                                    \
      s=${wSrc}x${hSrc}                                         \
      :d=${frames}                                              \
      :z='( ${zoomcode} ) / 16.89999'                           \
      :x='2*(${xPad} + ${xPoi}) * (zoom - 1) / zoom'            \
      :y='2*(${yPad} + ${yPoi}) * (zoom - 1) / zoom'            \
      [fg];                                                     \
      [1][fg]overlay=x=247:y=438                                \
  "

Т.к. зумить меньше, чем влезает во вьюпорт нельзя, сначала картинке добавляется по краям паддинг прозрачный, чтобы можно было уменьшать. Потом размер увеличивается с запасом раз в 5-10, чтобы сделать незаметными целочисленные пиксельные шаги зума и смещения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы