Вопрос или проблема
Я пытаюсь увеличить уровень размытия на протяжении всего видео. Мой код выглядит так, но, похоже, что 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 в конце. Вот как это можно сделать на примере:
-
Пример команды с использованием
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
.
-
Пример с использованием синтетического видео:
Если у вас нет собственного видео, вы можете использовать следующий пример с синтетическим видеоматериалом: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
, в аналогичном формате.
Если у вас возникли дополнительные вопросы или нужен более сложный пример, не стесняйтесь спрашивать!