Используйте -itsoffset
непосредственно перед наложенным вводом с тем же количеством секунд, которое вы используете в начале фильтра (3 в вашем случае)
Это поддерживает фильтр fade out
который у вас был, но этот фильтр не дает видимых результатов:
ffmpeg -y -i big_buck_bunny.mp4 -itsoffset 3 -i alpha.mov -filter_complex "[1:v] fade=out:st=30:d=1:alpha=1 [ov]; [0:v][ov] overlay=10:main_h-overlay_h-10:enable=between(t\,3\,5) [v]" -map "[v]" -map 0:a -c:v libx264 -c:a copy out.mp4
Это с 3 входами (2 оверлея и база) и без этого другого фильтра:
ffmpeg -y -i basevideo.mp4 -itsoffset 3 -i overlay1.mp4 -itsoffset 8 -i overlay2.mp4 -filter_complex "[0:v][1:v] overlay=0:0:enable=between(t\,3\,5) [oa]; [oa][2:v] overlay=0:0:enable=between(t\,8\,10) [ob]" -map "[ob]" -map 0:a -c:v libx264 -c:a copy output.mp4
Чтобы продолжать добавлять наложенные видео:
- добавьте
-itsoffset **X** -i newinput.mp4
после последнего входного файла.
- Порядок входных файлов важен
**X**
- время начала воспроизведения оверлейного видео (оно не будет отображать оверлей, просто начните внутреннее воспроизведение видео). Настройте его как необходимый (возможно, совпадая со значением **X**
на следующем шаге)
- вставить другой
[**previous_output**][**Y**:v] overlay=0:0:enable=between(t\,**X**\,**Z**) [**new_output**]
после последнего блока.
**Y**
- это Y -й входной файл, начинающийся с 0 (в моем примере basevideo - 0, overlay1 - 1, overlay2 - 2 и т.д.).
**X**
- время, когда наложение будет отображаться в выходном видео.
**Z**
- время, которое оверлей будет скрывать в выходном видео.
- Время отсчитывается как для начала основного видео, а не для длины наложенного видео, так что делайте ваши расчеты по продолжительности: если наложение видео длится 2 секунды,
**Z**
будет **X**
+ 2.
- Отрегулируйте
-map "[**XX**]
в конце команды, чтобы соответствовать **new_output**
, или вы будете писать в файл предыдущего шага!
ПРИМЕЧАНИЕ звук берется прямо из basevideo. Аудио из других источников игнорируются и не воспроизводятся вообще.