FFmpeg: Видео с кроссфейд-слайдами и эффектом «Переместить вверх/Переместить вниз» работает некорректно

FFmpeg: Видео с кроссфейд-слайдами и эффектом «Переместить вверх/Переместить вниз» работает некорректно

Я создаю видео из изображений, которые имеют разные размеры и ориентацию. На самом деле, мне нужно сделать анимацию слайдов видео на основе ориентации изображения (соотношения сторон). Итак, предположим, у меня есть 4 изображения со следующими размерами:

1.jpg 1280x1600 (сверху вниз)
2.jpg 1280x1600 (снизу вверх)
3.jpg 1280x1600 (сверху вниз)
4.jpg 1280x1280 (без эффекта)

ЗдесьFFmpegкоманда, которую я запускаю

ffmpeg -y -r 25 \ 
-loop 1 -t 5 -i 1.jpg \
-loop 1 -t 5 -i 2.jpg \
-loop 1 -t 5 -i 3.jpg \
-loop 1 -t 5 -i 4.jpg \
-i audio.mp3 \
-filter_complex " \
[0]crop=1280:1280:ow:((ih-oh)/5)*t,format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+0/TB[f0];
[1]crop=1280:1280:ow:(ih-oh)-((ih-oh)*t/5),format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+4/TB[f1];
[2]crop=1280:1280:ow:((ih-oh)/5)*t,format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[f2];
[3]fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+12/TB[f3];
[0][f0]overlay[bg1];[bg1][f1]overlay[bg2];[bg2][f2]overlay[bg3];[bg3][f3]overlay,format=yuv420p[v]" -map "[v]" -map 4:a -b:v 4000k -movflags +faststart -t 20 -s 1280x1280 out.mp4

Пожалуйста, посмотрите первые секунды видео.

введите описание изображения здесь

Итак, кроссфейд, обрезка и эффект работают, но, как вы видите, он оставляет ненужный раздел внизу видео. Все остальные анимации показаны в разделе выше

введите описание изображения здесь

Не уверен, но, кажется, он сохраняет высоту первого изображения (1600)? Жду предложений по исправлению этой проблемы

решение1

Использоватьxfadeфильтр:

введите описание изображения здесь

ffmpeg \
-loop 1 -t 5 -i cyan.jpg \
-loop 1 -t 5 -i magenta.jpg \
-loop 1 -t 5 -i yellow.jpg \
-loop 1 -t 5 -i black.jpg \
-i audio.mp4
-filter_complex \
"[0]crop=1280:1280[v1]; \
 [1]crop=1280:1280[v2]; \
 [2]crop=1280:1280[v3]; \
 [3]crop=1280:1280[v4]; \
 [v1][v2]xfade=wipedown:duration=1:offset=4[x1]; \
 [x1][v3]xfade=wipeup:duration=1:offset=8[x2]; \
 [x2][v4]xfade=wipedown:duration=1:offset=12,format=yuv420p[v]" \
-map "[v]" -map 4:a -movflags +faststart -shortest output.mp4

Галерею всех переходов можно посмотреть на сайтеFFmpeg Вики: xfade.

Связанный контент