Después de mucha investigación y pruebas, escribí un comando que puedo adaptar para concatenar múltiples fuentes usando FFMPEG. Sin embargo, tengo un problema al agregar imágenes en bucle (como videos) a la concatenación.
Aquí está el comando:
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
El resultado final debe ser 2 videos, luego una imagen repetida durante 3 segundos (sin audio), todo concatenado en un video largo. En cambio, todo lo que obtengo es un único vídeo concatenado que contiene los dos primeros vídeos, pero no la imagen en bucle.
Respuesta1
Parece que su secuencia de comandos pone en segundo plano los primeros 3 comandos, por lo que su secuencia de comandos ejecuta los comandos prácticamente al mismo tiempo. No hay garantía de que los comandos 1 a 3 se completen antes de que el cuarto concatene su salida. La eliminación de los signos y barras invertidas al final hará que el script espere a que se complete cada comando antes de comenzar el siguiente. Si cada comando utiliza la mayor parte del ancho de banda de E/S, este cambio no ralentizará mucho el script. De lo contrario, aquí hay un método para ejecutar los primeros 3 comandos en segundo plano, pero esperar hasta que terminen para ejecutar el cuarto (no probado).
{ ./prog1 ; ./prog2 ; ./prog3 ; } && ./prog4