Вот решение, которое я нашел;
ffmpeg -f lavfi -i color=s=1920x1080 -loop 1 -i "input.png" -filter_complex "[1:v]scale=1920:-2[fg]; [0:v][fg]overlay=y=-'t*h*0.02'[v]" -map "[v]" -t 00:03:00 output.mp4
Обратите внимание, что скорость прокрутки составляет 0,02. Установите его ниже, например 0,01, чтобы прокрутить медленнее, или выше, например, 0,03, чтобы прокрутить быстрее.
Обратите внимание, что я передал команде максимум 3 минуты. На этот раз, к сожалению, он должен быть больше, чем любой вывод с прокруткой изображения, который когда-либо мог бы занять ваша конкретная установка.
Для справки, изображение 1920x7043 пикселей занимает 49,88 секунды. Вы можете получить высоту изображения программно, используя;
file input.png | sed 's|.*1920 x \([0-9]\+\).*|\1|'
output: 7043
Если у кого-то есть лучший способ «определения конца прокрутки изображения - то есть последней строки / нижней части изображения, прокручиваемой от верхней части экрана» и возможность масштабировать время / продолжительность на основе этого - тогда это было бы очень удобно.
На данный момент это лучшее решение, которое у меня есть; просканируйте вывод последней команды ffmpeg, чтобы найти что-то вроде;
[blackdetect @ 0x559298835480] black_start:49.88
Например, используя эту команду;
ffmpeg -i output.mp4 -vf blackdetect=d=0.1:pix_th=.1 -f rawvideo -y /dev/null 2>&1 | grep -o "black_start:[\.0-9]\+ "
output: black_start:49.88
И урожай соответственно;
ffmpeg -i output.mp4 -t 49.88 -c copy finaloutput.mp4
vlc finaloutput.mp4 # Assuming you have vlc installed