У ffmpeg если несколько фильтров размытия. Самый простой avgblur . Но не один из фильтров не поддерживает изменение степени размытия на таймлайне. Поэтому создать эффект проявления картинки из блюра (blur in) и размытия (blur out) по формуле вроде (20-t) не получится. А жаль — эффект прикольный!
Но есть простой сниппет который я вам и покажу ниже. Суть идеи:
- сплитим входной поток (картинку) на два дублирующих потока
- один блюрим и делаем fade out по альфа каналу, чем добиваемся пропадания заблюренной картинки
- накладываем заблюренную и зафейденую картинку поверх оригинала с помощью фильтра overlay
- в итоге сначала мы видим верхнюю заблюреную картинку, которая начинает пропадать по fadeout альфа канала и проявляется подложка
- таким образом добиваемся эффекта blurin, для blurout делаем fadein
- эффект можно усилить если фейдить оригинал на который накладываем заблюреный слой
https://youtu.be/RdanelHCUAo
Код скрипта на Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
import os (w,h) = (640,480) # высота ширина клипа out_file = "c:\_tmp\out.mp4" clip_len = 12 filters = [ f"[1]split[orig][blur]", # ** Blur In #f"[blur]avgblur=sizeX=130:sizeY=20,fade=t=out:st=0:d={clip_len}:alpha=1[blur]", #f"[orig]fade=t=in:st=0:d={clip_len}[orig]", # ** Blur Out f"[blur]avgblur=sizeX=130:sizeY=20,fade=t=in:st=0:d={clip_len}:alpha=1[blur]", f"[orig]fade=t=out:st=0:d={clip_len}[orig]", f"[orig][blur]overlay" ] ''' Собираю ffmpeg ''' filters = ",".join(filters) cmd = f"ffmpeg -f lavfi -i color=c=gray:s={w}x{h} " # белый фон cmd += "-loop 1 -i data\kup1.jpg " # массив входных картинок cmd += f"-filter_complex \"{filters}\" " cmd += f"-t {clip_len} " cmd += f"-y {out_file}" print(cmd) # вывод подготовленной команды os.system(cmd) # выполняю os.system(r'"C:\Program Files\VideoLAN\VLC\vlc.exe" ' + out_file) # для удобства под виндой |
Код команды для ffmpeg
Чтобы это заработало нужно убрать лишние переносы и пробелы.
1 2 3 4 5 6 7 8 9 |
ffmpeg -f lavfi -i color=c=gray:s=640x480 -loop 1 -i data\kup1.jpg -filter_complex " [1]split[orig][blur], [blur]avgblur=sizeX=130:sizeY=20,fade=t=in:st=0:d=12:alpha=1[blur], [orig]fade=t=out:st=0:d=12[orig], [orig][blur]overlay " -t 12 -y c:\_tmp\out.mp4 |