Как увеличить мощность размытия во время воспроизведения видео с помощью FFmpeg?

Вопрос или проблема

Я пытаюсь увеличить уровень размытия на протяжении всего видео. Мой код выглядит так, но, похоже, что FFmpeg не распознает t:

ffmpeg -i input.mp4 -filter_complex "[0]smartblur=t*2" output.mp4

Я помню, что использовал t в overlay, но не знаю, почему это здесь не работает.

Я также пробовал boxblur и gblur, но это не сработало.

Согласно документации, похоже, что ни один из фильтров размытия не поддерживает временные выражения.

Мы можем получить эффект увеличения размытия по мере воспроизведения видео, комбинируя размытое видео с оригинальным видео.
Вес оригинального видео равен 1 в начале и 0 в конце, а вес размытого видео равен 0 в начале и 1 в конце.

Пример (предположим, продолжительность видео 10 секунд):

ffmpeg -y -i input.mp4 -filter_complex "[0:v]smartblur=luma_radius=5[blr];[0:v][blr]blend=all_expr=(1-T/10)*A+(T/10)*B" output.mp4


  • [0:v]smartblur=luma_radius=5[blr] – размывает входное изображение и сохраняет результат в [blr].
  • (1-T/10) – равно 1, когда T=0 и 0, когда T=10
  • (T/10) – равно 0, когда T=0 и 1, когда T=10
  • [0:v][blr]blend=all_expr=(1-T/10)*A+(T/10)*B применяет взвешенную сумму (смешивание) оригинального видео и размытого видео, при этом вес размытия увеличивается со временем.

Пример (используя синтетическое видео):

ffmpeg -y -f lavfi -i testsrc=size=192x108:rate=1:duration=10 -filter_complex "[0:v]smartblur=luma_radius=5[blr];[0:v][blr]blend=all_expr=(1-T/10)*A+(T/10)*B" output.mp4

размытие со временем

Ответ или решение

Чтобы увеличить силу размытия во время воспроизведения видео с помощью FFmpeg, вы правильно заметили, что многие фильтры размытия, включая smartblur, не поддерживают временные выражения, такие как t. Однако мы можем добиться эффекта наращивания размытия, используя смешивание оригинального видео с размытым видео.

Вес оригинального видео будет равен 1 в начале и 0 в конце, в то время как вес размытого видео будет равен 0 в начале и 1 в конце. Вот как это можно сделать на примере:

  1. Пример команды с использованием smartblur:

    ffmpeg -y -i input.mp4 -filter_complex "[0:v]smartblur=luma_radius=5[blr];[0:v][blr]blend=all_expr=(1-T/10)*A+(T/10)*B" output.mp4

    Объяснение:

    • [0:v]smartblur=luma_radius=5[blr] — этот фильтр размывает входное видео и сохраняет результат в [blr].
    • blend=all_expr=(1-T/10)*A+(T/10)*B — здесь применяется взвешенная сумма (смешивание) оригинального видео и размытого видео.
      • (1-T/10) равно 1, когда T=0 (начало видео), и 0, когда T=10 (конец видео).
      • (T/10) равно 0, когда T=0, и 1, когда T=10.
  2. Пример с использованием синтетического видео:
    Если у вас нет собственного видео, вы можете использовать следующий пример с синтетическим видеоматериалом:

    ffmpeg -y -f lavfi -i testsrc=size=192x108:rate=1:duration=10 -filter_complex "[0:v]smartblur=luma_radius=5[blr];[0:v][blr]blend=all_expr=(1-T/10)*A+(T/10)*B" output.mp4

Этот подход позволяет плавно увеличивать размытие на протяжении всего видео.

Наконец, если вы хотите, чтобы эффект был более заметным, вы можете экспериментировать с параметрами размытия, изменяя значение luma_radius или используя другие фильтры размытия, такие как boxblur или gblur, в аналогичном формате.

Если у вас возникли дополнительные вопросы или нужен более сложный пример, не стесняйтесь спрашивать!

Оцените материал
Добавить комментарий

Капча загружается...