Это возможно, но потребует дополнительных сценариев из-за переменного количества выбранных изображений, а также из-за отсутствия реальной возможности зацикливания для видео и аудио входов.
Этот ответ дает несколько примеров, но у вас есть дополнительное требование зацикливания видео и аудио потока.
Вот примеры, которые вы можете адаптировать и использовать. Сценарии будут зависеть от вас.
Пример 1
Этот пример предполагает, что:
Все входные изображения имеют одинаковый размер кадра. Это требование, иначе могут возникнуть проблемы с синхронизацией.
Все входы изображений называются img001.jpg
, img002.jpg
, img003.jpg
и т.д. В качестве альтернативы вы можете использовать шаблон glob, как описано в документации по демультиплексору файлов изображений.
ffmpeg -i video.mkv -i audio.mp3 -framerate 1/5 -i img%03.jpg -filter_complex \
"[0:v]setpts=PTS-STARTPTS[vid]; \
[vid][vid][vid]concat=n=3:v=1:a=0[bg]; \
[1:a][1:a][1:a]concat=n=3:v=0:a=1[a]; \
[2:v]drawbox=t=5:c=white[fg]; \
[bg][fg]overlay=(W-w)/2:(H-h)/2,format=yuv420p[v]" \
-map "[v]" -map "[a]" -shortest output.mp4
Пример 2
Другой метод заключается в явном перечислении каждого изображения в качестве отдельного ввода. Это может позволить вам при необходимости выполнить любое масштабирование, но делает команду еще более сложной:
ffmpeg -i video.mkv -i audio.mp3 -loop 1 -i hound.jpg -loop 1 -i crow.jpg \
-loop 1 -i donkey.png -filter_complex \
"[0:v]setpts=PTS-STARTPTS[vid]; \
[vid][vid][vid]concat=n=3:v=1:a=0[bg]; \
[1:a][1:a][1:a]concat=n=3:v=0:a=1[a]; \
[2:v]trim=duration=5,scale=640:360,drawbox=t=5:c=white[fg0]; \
[3:v]trim=duration=5,scale=640:360,drawbox=t=5:c=white[fg1]; \
[4:v]trim=duration=5,scale=640:360,drawbox=t=5:c=white[fg2]; \
[bg][fg0]overlay=(W-w)/2:(H-h)/2[ol0]; \
[ol0][fg1]overlay=(W-w)/2:(H-h)/2[ol1]; \
[ol1][fg2]overlay=(W-w)/2:(H-h)/2,format=yuv420p[v]" \
-map "[v]" -map "[a]" -shortest output.mp4
На Super User есть несколько ответов, которые предоставляют более сложные примеры масштабирования. Этот пример прост, но может привести к сжатым или растянутым выходным изображениям, если входные изображения различаются по соотношению сторон.
Что нужно определить
Для обоих методов, основываясь на том, сколько изображений выбирает пользователь, а также на продолжительности видео и аудио, вам нужно будет определить, сколько сегментов вам нужно для того, чтобы фильтр concat
обеспечил соответствующий цикл.
У вас могут возникнуть некоторые проблемы. Демуксеры и concat
изображения иногда бывают привередливыми.