1

Я пытался создать два эффекта с помощью FFmpeg: "занавес" ("двери сарая") и "стереть круг", но безуспешно. Основная идея заключается в том, чтобы начать с черного экрана (100% черного заполнения) и в течение 1 секунды (или более) отобразить все видео (черный отступ сверху и снизу должен становиться все меньше и меньше).

демонстрация

Как я могу это сделать?

1 ответ1

0

Как правило, есть два метода для достижения таких эффектов.

# 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .