Я пытаюсь создать базовый 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
Я знаю оошибка 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
, которые могут быть округлены как вверх, так и вниз. Это создает неравномерное движение из-за изменений в направлении панорамирования. Предварительное увеличение разрешения позволяет округлить меньше.