Конкатион FFMPEG не включает зацикленное изображение (используя именованные каналы)

Конкатион FFMPEG не включает зацикленное изображение (используя именованные каналы)

После долгих исследований и тестирований я написал команду, которую я могу адаптировать для объединения нескольких источников с помощью FFMPEG. Однако я столкнулся с проблемой при добавлении зацикленных изображений (как видео) в объединение.

Вот команда:

ffmpeg -y -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp1 2> /dev/null & \
ffmpeg -y -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp2 2> /dev/null & \
ffmpeg -y -f lavfi -i anullsrc  -loop 1 -f image2 -i input3.jpg -r 30 -t 3 -pix_fmt yuvj420p -map 0:a -map 1:v -f mpegts temp3 2> /dev/null & \
ffmpeg -y -f mpegts -i "concat:temp1|temp2|temp3" -bsf:a aac_adtstoasc out.mp4

Конечный результат должен быть 2 видео, затем изображение, зацикленное на 3 секунды (без звука), все это объединено в длинное видео. Вместо этого все, что я получаю, это одно объединенное видео, которое содержит первые два видео, но не зацикленное изображение.

решение1

Похоже, ваш скрипт выполняет первые 3 команды в фоновом режиме, поэтому ваш скрипт выполняет команды практически одновременно. Нет гарантии, что команды 1-3 завершатся до того, как 4-я объединит их вывод. Удаление конечных амперсандов и обратных косых черт заставит скрипт ждать завершения каждой команды перед запуском следующей. Если каждая команда использует большую часть пропускной способности ввода-вывода, то это изменение не сильно замедлит ваш скрипт. В противном случае, вот метод запуска первых 3 команд в фоновом режиме, но дождаться их завершения, чтобы запустить 4-ю (не проверено).

{ ./prog1 ; ./prog2 ; ./prog3 ; } && ./prog4

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