ffmpeg: плавное масштабирование без рывков

ffmpeg: плавное масштабирование без рывков

Я пытаюсь создать базовый 5-секундный зум-панорам в центре изображения (из примера навеб-сайт ffmpeg.org). Приведенная ниже команда работает, но после 5 чашек кофе у меня трясутся сильнее, чем руки:

ffmpeg -framerate 25 -loop 1 -i island.jpg -filter_complex "[0:v]scale=-2:480,zoompan=z='min(zoom+0.0015,1.5)':x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':d=125,trim=duration=5[v]" -map "[v]" -y out.mp4

Входной jpg. Вывод mp4.

Я знаю оошибка ffmpeg #4298. Опубликованное предлагаемое решение — использовать scaleфильтр до zoompan. Но, как показано в моем примере, это все еще, похоже, не дает никакого эффекта.

Похоже, что любые произвольные значения x или y вызывают эффект дрожания/дергания/тряски.

Может ли кто-нибудь предложить какой-либо эффективный способ решения? Спасибо!

Информация о версии:

ffmpeg version 3.1.2-static http://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 5.4.0 (Debian 5.4.0-6) 20160609

решение1

Избегатьвнизмасштабирование заранее. Либо применить функцию trunc к выражениям x и y. Или масштабировать его заранее. Предпочтительнее последнее. Это избавляет меня от большей части дрожания.

ffmpeg -framerate 25 -loop 1 -i island.jpg -filter_complex "[0:v]scale=8000x4000,zoompan=z='min(zoom+0.0015,1.5)':x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':d=125,trim=duration=5[v]" -map "[v]" -y out.mp4

По сути, фильтр округляет значения из выражений xи y, которые могут быть округлены как вверх, так и вниз. Это создает неравномерное движение из-за изменений в направлении панорамирования. Предварительное увеличение разрешения позволяет округлить меньше.

Связанный контент