FFMPEG, erstes Bild extrahieren und 5 Sekunden halten

Ich versuche, einen 15-Sekunden-Videoübergang am Anfang einer Bildsequenz (png-Sequenz mit einem Alpha, um das Bild unten anzuzeigen) zu überlagern, was ich mit dem Überlagerungsfilter gut machen kann. Aber ich möchte den ersten Frame der Bildsequenz für 5 Sekunden halten, bevor ich die Animation abspiele. Ich habe versucht, zu trimmen / auszuwählen, aber ich kann es anscheinend nicht auf eine Dauer von 5 Sekunden bringen, ich kann es auch nicht mit dem anderen Video verbinden, um den Übergang durchzuführen. Also meine Fragen sind:

  1. Wie erhalte ich den ersten Frame und halte ihn 5 Sekunden lang gedrückt, die folgende Methode funktioniert, scheint aber nicht die beste Methode zu sein?

-start_number 501 -framerate 30 -t 60.0 -i input1.%04d.jpg -framerate 30 -t 15.0 -i transition1_%03d.png -filter_complex "color=c=red:d=5:s=480x270:r=30 [bg]; [bg][1:v]overlay[transhold]; [0:v][transhold]overlay=repeatlast=0[out]"

  1. Kann ich das dann einfach mit dem Original verketten oder ist es besser, zwei Überlagerungen zu machen, wobei der Beginn des eigentlichen Übergangs um die Länge des Halts versetzt ist?

Vielen Dank

Nick

Für die 2. Frage würde mein Code so aussehen: -start_number 501 -framerate 30 -t 60.0 -i input1.%04d.jpg -framerate 30 -t 15.0 -i transit1_%03d.png -filter_complex "color=c=red: d=5:s=480x270:r=30[bg]; [1:v]split[trans][transhold]; [trans]setpts=PTS+5/TB[trans];[transhold]select=eq(n \0)[transhold];[bg][transhold]overlay[transhold]; [0:v][transhold]overlay=repeatlast=0[tmp1]; [tmp1][trans]overlay[out]"

Antworten (1)

Verwenden

ffmpeg -start_number 501 -framerate 30 -t 60.0 -i input1.%04d.jpg 
       -framerate 30 -t 15.0 -i transition1_%03d.png
       -filter_complex "[0]loop=149:1:0[bgheld5];
                        [1]loop=149:1:0[fgheld5];
                        [bgheld5][fgheld5]overlay=eof_action=pass"  out.mp4

Die ersten Frames beider Sequenzen werden 149 mal wiederholt, so dass es 150 Instanzen gibt (30 fps x 5s). Das 0am Ende der Schleife ist der Anfangsindex des/der zu schleifenden Frames. Die Mitte 1ist die Anzahl der Frames, die ab dem Index im 3. Argument wiederholt werden sollen.

Super, das ist ziemlich genau das, wonach ich gesucht habe. Der einzige Unterschied ist, dass ich die erste Eingabe nicht loopen muss, also ist mein Filter "[1]loop=149:1:0[trans];[0][trans]overlay=eof_action=pass"