После долгих исследований и испытаний я написал команду, которую можно адаптировать для объединения нескольких источников с использованием 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 ответ1

0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .