Как правило, есть два метода для достижения таких эффектов.
# 1
Создайте анимированную маску в градациях серого и прикрепите ее в качестве альфа-канала к видео. Выполните наложение видео на черный холст.
Плюсы: одноразовая операция по генерации маски. Гораздо быстрее, чем метод 2.
Минусы: параметры анимации, такие как размер, скорость, продолжительность фиксированы. Они могут быть изменены в ffmpeg, но результаты могут быть не гладкими. Файл маски должен быть сохранен и доступен.
# 2
Используйте фильтр смешивания с пустым холстом в качестве нижнего слоя и установите выражения для выполнения эффекта.
Плюсы: настраиваемые. Может потребоваться некоторое количество проб и ошибок для достижения точного эффекта.
Минусы: намного медленнее, чем метод 1. При меньших разрешениях результат получается более грубым, чем правильно сглаженная маска. Если вы не помните выражения или то, как они работают, выражения также должны быть сохранены, и настройка может быть сложной.
Тем не менее, вот два эффекта с использованием фильтра наложения. Оба эффекта начинаются через 2 секунды и происходят в течение 3 секунд.
Шторы, открытые вертикально
ffmpeg -i in.mp4 -filter_complex \
"[0]format=yuv444p,split=2[bg][v];[bg]drawbox=t=fill[bg]; \
[v][bg]blend=all_expr='if(lte(2*abs(Y-H/2)/H,(T-2)/3),A,B)',\
format=yuv420p" \
out.mp4
Более быстрый метод может быть адаптирован из первой команды здесь. Эта команда делает это горизонтально.
Круг Wipe, расширение
ffmpeg -i in.mp4 -filter_complex \
"[0]format=yuv444p,split=2[bg][v];[bg]drawbox=t=fill[bg]; \
[v][bg]blend=all_expr='if(lte(sqrt(pow(X-W/2,2)+pow(Y-H/2,2))/sqrt(pow(W,2)+pow(H,2)),(T-2)/3)/2,A,B)',\
format=yuv420p" \
out.mp4