FFMPEG-Concat schließt kein gelooptes Bild ein (unter Verwendung benannter Pipes)

FFMPEG-Concat schließt kein gelooptes Bild ein (unter Verwendung benannter Pipes)

Nach viel Recherche und Tests habe ich einen Befehl geschrieben, den ich anpassen kann, um mehrere Quellen mit FFMPEG zu verketten. Ich stoße jedoch auf ein Problem beim Hinzufügen von geloopten Bildern (als Videos) zur Verkettung.

Hier ist der Befehl:

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

Das Endergebnis sollten zwei Videos und dann ein drei Sekunden lang in einer Schleife abgespieltes Bild (ohne Ton) sein, alles zu einem langen Video zusammengefügt. Stattdessen erhalte ich nur ein einziges zusammengefügtes Video, das die ersten beiden Videos enthält, aber nicht das in einer Schleife abgespielte Bild.

Antwort1

Es scheint, dass Ihr Skript die ersten drei Befehle in den Hintergrund stellt, sodass Ihr Skript die Befehle praktisch gleichzeitig ausführt. Es gibt keine Garantie, dass die Befehle 1 bis 3 abgeschlossen sind, bevor der vierte Befehl ihre Ausgabe verkettet. Wenn Sie nachstehende Et-Zeichen und Backslashs entfernen, wartet das Skript, bis jeder Befehl abgeschlossen ist, bevor der nächste gestartet wird. Wenn jeder Befehl die meiste E/A-Bandbreite verwendet, wird diese Änderung Ihr Skript nicht wesentlich verlangsamen. Andernfalls gibt es hier eine Methode, um die ersten drei Befehle im Hintergrund auszuführen, aber zu warten, bis sie fertig sind, um den vierten auszuführen (ungetestet).

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

verwandte Informationen