Mit einem beliebigen Quellvideo möchte ich während des Videos zu verschiedenen Zeiten mindestens drei .png Overlays/Wasserzeichen UNABHÄNGIG ein- und ausblenden. Ich habe Probleme, die Syntax für die Filterkette richtig zu machen.Wie blende ich unabhängig voneinander mehrere (3+) Overlay-Bilder über Video mit FFMPEG ein/aus?
Bei diesen fehlgeschlagenen Versuchen verwende ich vier transparente .png-Bilder alle bei 1920x1080 mit dem gleichen Quell-Eingangsvideo. Es ist keine Skalierung/Positionierung erforderlich, nur die Überlagerungen werden zu definierten Zeiten ein- und ausgeblendet.
Ich habe die Funktionalität ohne Fade arbeiten, unsing 'enable', etwa so:
ffmpeg -i vid1.mp4 -loop 1 -i img1.png -i img2.png -i img3.png -i img4.png -filter_complex
"overlay=0:0:enable='between(t,8,11)' [tmp];
[tmp]overlay=0:0:enable='between(t,10,15)'[tmp1];
[tmp1]overlay=0:0:enable='between(t,15,138)'[tmp2];
[tmp2]overlay=0:0:enable='between(t,140,150)"
-c:v libx264 -c:a copy
-flags +global_header -shortest -s 1920x1080 -y out.mp4
Ich möchte nur die gleiche Steuerung, mit Fade-in/out.
Die folgenden fast funktioniert, wie ich möchte, aber ich will natürlich nicht den gesamten Ausgangsstrom ausblenden. Ich bemerke, dass das Hinzufügen der Fade = out zu Linien 7, 8 & 9 verblasst die kombinierte Ausgabe (beginnend bei Zeile 7), aber das ist so nah wie ich gekommen bin, wo ich sehe, dass jedes Overlay-Bild tatsächlich verblassen. Die definierten Überblendungen in den Zeilen 3, 4 und 5 beeinflussen scheinbar nichts, und dort habe ich sie ursprünglich definiert. Wenn ich sie in den Ausgabestream kopiere, funktioniert die Überblendung für jedes Überlagerungsbild, aber ich möchte nicht, dass sie den gesamten Ausgabestrom beeinflusst, sondern nur die einzelnen Überlagerungen.
ffmpeg -i vid1.mp4 -loop 1 -i img1.png -i img2.png -i img3.png -i img4.png -filter_complex
"[1:v]fade=out:st=3:d=1[watermark0];
[2:v]fade=out:st=4:d=1[watermark1];
[3:v]fade=out:st=5:d=1[watermark2];
[4:v]fade=out:st=6:d=1[watermark3];
[0:v][watermark0] overlay=0:0 [tmp0];
[tmp0][watermark1] overlay=0:0,fade=out:st=4:d=1 [tmp1];
[tmp1][watermark2] overlay=0:0,fade=out:st=6:d=1 [tmp2];
[tmp2][watermark3] overlay=0:0,fade=out:st=8:d=1 [out]" -map "[out]" -c:v libx264 -c:a copy
-flags +global_header -shortest -s 1920x1080 -y out.mp4
Ich habe auch versucht, ‚split‘ mit ähnlichen Ergebnissen wie oben, aber die verblassen scheint nur auf dem ersten Bild zu arbeiten (dies verwendet Einblendung auch):
ffmpeg -i vid.mp4 -loop 1 -i img1.png -i img2.png -i img3.png -i img4.png -filter_complex
"[1:v]split=4[wm1][wm2][wm3][wm4];
[wm1]fade=in:st=1:d=1:alpha=1,fade=out:st=3:d=1:alpha=1[ovr1];
[wm2]fade=in:st=2:d=1:alpha=1,fade=out:st=4:d=1:alpha=1[ovr2];
[wm3]fade=in:st=3:d=1:alpha=1,fade=out:st=5:d=1:alpha=1[ovr3];
[wm4]fade=in:st=4:d=1:alpha=1,fade=out:st=6:d=1:alpha=1[ovr4];
[0:v][ovr1]overlay=0:0[base1];
[base1][ovr2]overlay=0:0[base2];
[base2][ovr3]overlay=0:0[base3];
[base3][ovr4]overlay=0:0[out]" -map "[out]"
-t 10 -c:v libx264 -c:a copy -flags +global_header -shortest -s 1920x1080 -y out.mp4
Jede Hilfe wird sehr geschätzt! :)
Das funktioniert gut - ich verliere jedoch den Ton im Ausgangsvideo. Muss das separat zugeordnet werden oder wie schließe ich das Quellvideo des primären Videos ein? Danke für die Hilfe! – blahblahber
Ja, füge '-map 0: a' hinzu – Mulvya