Возможно ли в FFMPEG изменять масштаб со временем?

11

Итак, используя оверлейный фильтр, можно изменить местоположение видео по времени с помощью x / y, используя переменную «t». Например, overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0может использоваться, чтобы начать скольжение наложенного элемента сверху слева направо, через 2 секунды прошло.

Я хочу использовать аналогичный принцип для масштабирования элементов. Я хотел бы иметь возможность изменять масштаб видео с течением времени с помощью выражения (например scale=w=iw*t, или что-то подобное).

Это возможно?

когда я запускаю это выражение через -filter_complex, я получаю

Ошибка при вычислении выражения 'iw * t'.

Может быть, выражение для out_w: 'iw * t' или для out_h: '- 1' является самоссылкой.

Я чувствую, что есть большая вероятность, что мне понадобится пропатчить FFMpeg, если я хочу получить эту функциональность, но я подумал, что сначала спрошу, чтобы узнать, кто-нибудь узнает об этом!

Кто-нибудь знает, как можно решить такую ​​задачу?

Спасибо за помощь!

theophilus777
источник
Звучит скорее как синтаксическая ошибка, но я не использовал эту функцию раньше, поэтому, к сожалению, я не могу здесь помочь.
PTS
1
Это не определенная вещь, когда дело доходит до оверлейного фильтра.
v010дя
1
Вы можете просто написать фильтр. wiki.multimedia.cx/index.php?title=FFmpeg_filter_howto
denjello
1
@alexspeller масштабный фильтр не поддерживает редактирование временной шкалы, поэтому это невозможно сделать напрямую. Я проверю, есть ли обходной путь.
Gyan
1
Технически возможно с выходом H.264 / 5. Не знаю, как игроки / редакторы справятся с этим.
Gyan

Ответы:

2

Из того, что я понимаю, 't' оценивается один раз. Вы читали это: https://ffmpeg.org/ffmpeg-filters.html#zoompan ?

Документы Ffmpeg:

9.170.1 Примеры

  • Увеличьте масштаб до 1,5 и одновременно перемещайтесь в какое-то место рядом с центром изображения:

zoompan = г = 'мин (увеличение + 0.0015,1.5)': d = 700: х = 'если (GTE (увеличение, 1,5), х, х + 1 / а)': у = ', если (GTE (масштабирование, 1.5), у, у + 1) ': s = 640x360

  • Увеличение до 1,5 и панорамирование всегда в центре изображения:

zoompan = г = 'мин (увеличение + 0.0015,1.5)': d = 700: х = 'IW / 2- (IW / увеличение / 2)': у = 'IH / 2- (Ih / увеличение / 2)'

  • То же, что и выше, но без паузы:

zoompan = г = 'мин (макс (увеличение, pzoom) +0.0015,1.5)': d = 1: х = 'IW / 2- (IW / увеличение / 2)': у = 'IH / 2- (Ih / увеличение / 2)»

обкрадывать
источник