2017-02-19 10 views
1

Я использую ffmpeg для создания петлевого видео, где петля полностью гладкая, такая же, как перемещение между всеми кадрами. У меня есть 27 изображений, которые преобразуются в другой, поэтому кадр 0 = кадр 27 Я использую -vf minterpolate = fps = 30 между изображениями, поэтому переход очень плавный. У меня есть -фрагмент 10, поэтому в теории интерполяционный фильтр создает 3 дополнительных кадра. Поэтому я удалить 27'th рамку и создания видеоffmpeg интерполировать петлю, чтобы быть гладкой

FFmpeg -framerate 10 -start_number 0 -i ./motion/%d.png -vf "minterpolate = FPS = 30"

Но когда это зацикливание, нет перехода между 0 и последним кадром, и он не является гладким. Как создать плавный переход между циклами? Я попытался оставить 27-й кадр и при склеивании видео удалить последний кадр, который повторяется. но не знаю, как разрезать только один кадр, по времени он не удался.

Пожалуйста, помогите мне получить гладкую петлю с фильтром minterpolate.

ответ

1

Если я правильно вас понимаю, интерполяция от последнего кадра к первому кадру не происходит. Быстрое решение - скопировать первый кадр и переименовать его, чтобы сделать его последним фреймом. Итак, если 1.png является первым изображением, а 27.png является последним, тогда дублируйте 1.png как 28.png. Теперь запустите свою текущую команду. В петлевом суставе у вас будет один дополнительный кадр из 1/28.png, который повторяется. Это увеличит продолжительность видео на 0,033 секунды. Если вам нужно удалить его, примените trim=end_frame=83 после minterpolate.

+0

Спасибо за информацию. Я попробовал, но это не помогло. Чтобы проверить цикл, я использую concf для ffmpeg, чтобы удваивать один и тот же файл несколько раз. Когда цикл начинается, есть как разрыв или быстрый переход к следующему кадру без каких-либо эффектов/интерполяции. Это плохо, что minterpolate не может кэшировать его результаты, поэтому я сейчас разделяю эти процессы. Мне просто нужна интерполяция между этими 28 кадрами и повторять их много раз. И это ОЧЕНЬ медленно, и использует только 1 нить/1 ядро. И использовать только cpu :(Я не знаю никаких других методов интерполяции, я пытался использовать масляный поток, но он никогда не работал – Ural

+0

Можете ли вы поделиться изображениями? – Mulvya

+0

Пожалуйста, заберите его здесь: https://www.sendspace.com/file/0ddjrt Благодарим за помощь. 0.png = 27.png – Ural

0

Я распаковал интерполяцию видео в рамки и увидел, что что-то не так в начале, между первыми кадрами. Возможно, minterpolate что-то пропускает, но я разрешил его, используя trim = start_frame = 81: end_frame = 162, поэтому я сгенерировал два раза больше изображений и разрезал их после первого цикла. Я знаю, что это накладные расходы, и попытался добавить еще 3-4 дополнительных кадра, но только эта комбинация работала хорошо.

@Mulvya, спасибо за ответ, вы мне очень помогли

Смежные вопросы